2016-08-29 10 views
0

나는 spring-amqp와 annotation 기반 청취자가있는 spring boot를 사용하여 rabbitmq broker로부터 메시지를 소비한다. 나는이 같은 방법을 포함하는 스프링 요소했습니다 :amqp로 봄 부팅시 주석 기반 수신기를 사용하는 메시지를 NACK하는 올바른 예외 유형은 무엇입니까?

@RabbitListener(queues = "tasks") 
    public void receiveMessage(@Payload Task task) {...} 

내가 receiveMessage (...)의 성공적인 실행 후 메시지를 확인하도록 AUTO 모드를 사용하고 있습니다. 특별한 오류가 발견되면, 나는이 메시지를 구성된 데드 레터 큐로 가져 오기 위해 AmqpRejectAndDontRequeueException을 던지고있다. 이제는 메시지를 nack해야 메시지가 rabbitmq의 메인 큐로 큐에 들어가고 다른 소비자는 다시 그 메시지를 처리 ​​할 수 ​​있습니다.

그 예외는 무엇입니까? 가능한 경우 여기 (http://docs.spring.io/spring-integration/reference/html/amqp.html)에 설명 된 것처럼 channel.basicNack (...)을 사용하고 싶지 않습니다.

답변

1

컨테이너 팩터 리에서 defaultRequeueRejected (기본값)이 true (기본값)이면 AmqpRejectAndDontRequeueException이 아닌 예외가 발생하면 메시지가 거부되고 다시 채워집니다.

예외는 원인 체인에 AmqpRejectAndDontRequeueException이 없어야합니다. 컨테이너는 예외가 발생하지 않도록 원인을 탐색합니다.