2009-06-22 2 views
3

JMS 대기열에서 사용하고 결과를 다른 JMS 대기열로 보내는 메시지 핸들러가 있습니다. 메시지 처리기는 Spring DefaultMessageListenerContainer에 있습니다. 컨테이너가 종료되면 이미 소비 한 요청을 처리하고 결과를 보내고 싶습니다. 동시에 요청 대기열에서 새 메시지를 소비하지 않아야합니다.정상적으로 Spring JMS MessageListenerAdapter를 종료하는 방법

안전 종료 ApplicationContext.registerShutdownHook()을 사용하지 않으면 컨테이너가 대기중인 listernerMethod 호출을 기다리지 만 응답 큐에 결과를 보내지 않습니다.

실행중인 핸들러에서 생성 된 응답이 응답 대기열로 보내지는지 확인하기위한 적절한 접근 방법은 무엇입니까?

답변

2

이동 방법은 DisposableBean 인터페이스 또는 @PreDestroy 주석을 통해 이루어져야한다고 생각합니다. 중요한 것은 IMHO가 DMLC를 종료시키지 않고 현재 "시스템 내부"의 메시지를 인식하는 구성 요소에 의해 수행되도록하는 것입니다. 이렇게하면 현재 진행중인 메시지가 완료 될 때까지 기다리는 동안 새 메시지 청취를 중단합니다.

빈 선언에 depends-on 속성을 사용하면 종료 할 Bean의 순서를 정의 할 수도 있습니다. 빨강에 대한 자세한 내용은 Spring reference documentation.

관련 문제