2016-09-17 4 views
0

RabbitMQ에서 메시지를 수신하는 애플리케이션이 있습니다. 일단 메시지가 소비되고 어떤 문제가 발생하면. setDefaultRequeueRejectedtrue으로 설정했으며 큐에 다시 대기 중입니다.메시지는 Spring AMQP에서 카운트 가능한 셀 수만 읽습니다.

이제 시나리오가 있습니다. 메시지가 대기열로 돌아 가면 다시 소비되고 다시 대기열에 들어갑니다. 이것은 일종의주기를 형성합니다.

이제 다시 대기열에있는 메시지를 두 번만 소비해야합니다 (카운터 종류 유지). 그 후에는 ErrorQueue/DeadLetter Queue로 밀어 넣습니다. 카운터를 유지 관리하는 방법은 무엇입니까?

감사

이것을 Chandan

답변

0

RabbitMQ 같은 메커니즘, 메시지가 재전송 된 나타내는 부울 단지 헤더를 제공하지 않는다.

발신자가 messageId 헤더를 설정하면 stateful retry interceptor with을 사용할 수 있으며 프레임 워크는 동일한 메시지가 전달 된 횟수를 추적합니다. RejectAndDontRequeueRecoverer을 사용하면 재시도 횟수가 모두 지나면 메시지가 DLQ (구성된 경우)로 전송됩니다.

메시지 ID가없는 경우 사용자 지정 MessageKeyGenerator을 사용하여 메시지 자체에서 상태에 대한 키를 생성 할 수 있습니다.

+0

감사합니다. Gary. 나는'MessageKeyGenerator'에 대해 더 관심이있다. 샘플 구현/예제를 제공해 주시겠습니까? 이것은 나에게 많은 도움이 될 것입니다 :) – Chandan

+0

이것은 간단한 인터페이스 인'Object getKey (Message message)'입니다. 메시지에 대한 참조를 가져 와서 헤더 나 메시지 본문에서와 같이 메시지를 고유하게 식별하는 값을 반환합니다. 생성자가 없다면, 우리는'messageId' 속성을 사용합니다 - 이것은 보낸 사람이 설정해야하며 고유해야합니다. 메시지는 변환되기 전에 원시 형식입니다. –

+0

나는 아직도 명확하지 않았다. 샘플 구현으로 리디렉션 해 주시겠습니까? – Chandan