2016-10-21 2 views
0

스트림 배포 취소 작업이 진행되는 동안 메시지를 다시 큐에 추가 할 수 있습니까?Spring XD : 스트림 배포를 취소 할 때 처리중인 메시지를 처리하는 방법

배포가 진행되는 동안 프로세서가 느린 RabbitMQ에서 처리되지 않은 메시지가 10 개 있다고 가정 해 봅시다. 디스패처에 구독자가 없어서 메시지가 DLQ로 전달되지 않도록하려면 어떻게해야합니까? 입력 프로세서 큐에서 대기 중입니까?

답변

0

이러한 예외는 발생하지 않아야합니다. 모듈은 왼쪽에서 오른쪽으로 중지되므로 다운 스트림 구성 요소가 입력 채널에서 등록 취소되기 전에 인바운드 채널 어댑터를 중지해야합니다.

맞춤 모듈입니까?

+0

스트림은 RabbitMQ 소스, 두 개의 사용자 지정 프로세서 및 사용자 지정 Elasticsearch 싱크로 구성됩니다. 프로세서는 항상 필터와 변환 (입력 -> 필터 -> 변환 -> 출력)을 정의합니다. – TheaterOfThought

+0

흠 - 모듈을 배포 취소 할 때 모듈 자체가 중지되기 전에 입력 채널을 공급하는 인바운드 채널 어댑터를 종료하기 위해 메시지 버스가 호출됩니다 (채널 가입 취소). 리스너 컨테이너는 작업이 완료 될 때까지 최대 5 초 동안 기다린 후 포기합니다. 그래서 이것은 문제가 될 수 있습니다 귀하의 모듈 (들) 메시지에 대한 5 초 이상 걸릴 수 있습니다. 이 5 초는 구성 가능하지만 버스는 현재이를 설정하기위한 속성을 노출하지 않습니다. 배포가 진행되는 동안'org.springframework'에 대한 DEBUG 로깅을 켜면 빈 수명주기 메시지가 나타납니다. –

+0

답변을 주셔서 감사합니다. 방금 더 조사 할 시간이있었습니다. 맞다면 org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer 클래스의 shutdownTimeout 특성을 사용자 정의하는 것이 좋습니다. 그것은 디버그 세션에서 값을 설정하여 내 문제를 해결했다. 이 제한 시간을 Spring XD 구성에서 구성 할 계획이 있습니까? – TheaterOfThought