2015-01-30 4 views
2

예외가 발생하면 어떤 메시지도 다시 큐에 넣지 않아도되지만 다른 큐에 메시지를 게시하려고하는 리스너 클래스 (Spring의 MessageListener 인터페이스 구현)가 있습니다.Spring AMQP 예외 처리 기본 사항

나는 청취자가 AmqpRejectAndDontRequeueException을 잡기 위해 필요하다고 생각하지만, 나는 예외를 던지기 위해 그것을 필요로한다는 것을 읽었다. 그렇게하면 메시지를 다시 게시 할 수 없습니다.

일반 예외를 잡아서 거기에 다시 게시해야합니까? 그 시점에서 실제로 AmqpRejectAndDontRequeueException을 던질 필요가 있습니까?

나는 이것을위한 모범 사례에 대해 궁금해. 감사.

답변

4

이 방법에는 여러 가지가 있습니다.

가장 간단히 말해 클라이언트 측에서 모든 예외를 catch하고 AmqpRejectAndDontRequeueException을 던집니다. 그렇지 않으면

, 당신은 당신의 자신의 전략을 가지고 항상 true

+0

감사를 반환 할 필요 FatalExceptionStrategy를 보라. 그 시점에서 AmqpRejectAndDontRequeueException 예외를 던지지 않으면 어떻게됩니까? 그것은 다시 채워지 는가? 내 config에 AdviceChain이 retryInterceptor가 없습니다. 나는 그냥 데드 레터 큐를 사용해야 만 할까? – mstrom

+0

@mstrom 예외를 처리 할 준비가되지 않은 경우 왜 DLQ가 필요한지, 전략을 무시하거나 try catch 블록을 사용하여 handleMessage 메소드를 추가하거나 둘러싸면 – Jaiwo99

+0

예외를 처리하는 경우 게시 한 다음 메시지를 소비합니다. 예외가 없으면 메시지가 거부됩니다. DLX/DLQ를 사용하는 경우에만 예외가 발생하는 유일한 이유가 있습니다. 스택 추적과 같은 정보를 담고있는 헤더와 함께 실패한 메시지를 다른 큐에 게시하는'RepublishMessageRecoverer '로 재시도 인터셉터를 구성 할 수도 있습니다. 또한 defaultRequeueRejected를 false로 설정하여 예외에 관계없이 실패한 메시지를 항상 거부 할 수 있습니다. –