🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

두 번 종료해야 꺼지는 이유?

23.08.18 00:30 작성 조회수 224

0

wakeup()이 호출되지 않으면 종료되지 않고 다시 실행되는 이유가 무엇일까요..?

답변 1

답변을 작성해보세요.

0

안녕하십니까,

consumer는 main thread가 아니라 별도의 thread로 java client application에서 구동됩니다. 때문에 consumer를 정상적으로 종료 시키려면 명시적으로 consumer 객체의 close()를 호출해 줘야 합니다. 그렇지 않고 java application만 종료 시키면 consumer가 정상적으로 종료되지 않을 수 있습니다.

그런데 보통은 consumer가 무한 루프상에서 계속 데이터가 들어올것을 예상하며 poll()을 하고 있기 때문에 loop를 빠져나가서 consumer객체의 close()를 호출하기가 어렵습니다.

때문에 java application을 종료하기 전에 명시적으로 wakeup()을 호출해서 WakeUpException을 발생시켜서 catch finally 절에서 consumer객체의 close()를 호출하게 만들어 줍니다.

보다 자세한 사항은 이전 강의 영상인 Wakeup을 이용하여 Consumer를 효과적으로 종료하기 에서 설명드리고 있으니, 다시한번 참조해 보시면 좋을 것 같습니다.

감사합니다.

채널톡 아이콘