2016-08-29 1 views
0

우리는 대기열을 생성하고 응답에서 대기열 이름을 수신하기 위해 webservice를 호출하는이 설정을 사용합니다.Spring amqp : 종료를 감지하고 다른 대기열에 다시 연결

그런 다음 SimpleMessageListenerContainer를 설정하고 큐 이름을 설정 한 다음 시작합니다.

그러나 때때로 큐가 삭제되므로 "404는 큐 XXXXXXXXX을 선언 할 수 없습니다."오류가 발생합니다. 이 경우 webservice를 다시 호출하고 SimpleMessageListenerContainer에 새 QueueName을 추가 한 다음 이전 QueueName을 제거해야합니다.

내가 처리 할 수있는 코드를 알아내는 유일한 방법은 사용자 지정 CachedConnectionFactory를 만들고 shutdownCompleted 메서드를 재정의하는 것입니다.

그러나 SimpleMessageListenerContainer가 전환 될 때 shutdownCompleted가 트리거되어 루프에 고정됩니다. shutdownCompleted로 보내지는 ShutdownSignalException은 트리거가 서버 또는 새 큐를 처리하는 클라이언트로부터 외부 인 경우에는 전혀 달라 보이지 않으므로 "두 번째"처리를 건너 뛰는 방법을 알아낼 수 없습니다.

그래서 서버가 대기열을 죽이면 사용자 지정 처리를 감지하고 실행하는 일반적인 방법은 무엇입니까?

답변

0

리스너가 실패 할 때 컨테이너는 ListenerContainerConsumerFailedEvent을 게시합니다.

ApplicationListener<ListenerContainerConsumerFailedEvent>을 추가하고 컨테이너를 중지하고 큐를 변경 한 다음 다시 시작하십시오.

기본적으로 컨테이너가 포기하고 멈추기 전에 3 번 다시 연결하려고하기 때문에 여러 이벤트가 발생할 가능성이 높습니다.

관련 문제