스프링 JMS Messagelisteneradapter를 우아하게 종료하는 방법
문제
JMS 큐에서 소비되는 메시지 핸들러가 있으며 다른 JMS 큐에 결과를 보냅니다. 메시지 처리기는 Spring DefaultMesseAgelistenerContainer에 있습니다. 컨테이너가 종료되면 이미 소비 한 요청 처리를 완료하고 결과를 보내려고합니다. 동시에 요청 큐에서 새 메시지를 더 이상 소비하지 않아야합니다.
현재 특수 종료 조항이 없으면 Safe ApplicationContext.registershutdownhook ()가 보류중인 ListernerMethod 호출을 반환 할 때까지 대기하지만 응답 대기열로 결과를 보내지는 않습니다.
실행 핸들러가 생성 한 응답이 응답 대기열로 전송되도록하기위한 적절한 접근법은 무엇입니까?
해결책
가는 길은 DisposableBean
인터페이스 또는 @PreDestroy
주석. IMHO의 핵심은 Spring이 DMLC를 종료하도록하는 것이 아니라 현재 "시스템 내부"메시지를 알고있는 구성 요소에 의해 수행하도록하는 것입니다. 이렇게하면 현재 진행된 메시지가 완료되기를 기다리는 동안 새 메시지 듣기를 중단합니다.
사용 depends-on
Bean 선언에 대한 속성 종료 된 콩 순서를 정의 할 수도 있습니다. 이것에 대해 더 많이 봄 참조 문서.
제휴하지 않습니다 StackOverflow