2014-04-07 2 views
0

RabbitMQ 큐에서 메시지를 소비하는 기본 MessageListener 구현을 제공하는 경우, 해당 예외 유형에 따라 다른 데드 - 레터 큐에 메시지를 보내려면 어떻게해야합니까? 처리하는 동안 던져 질 수 있습니까?Spring Amqp + RabbitMQ에서 다른 데드 레터 큐 (예외를 기반으로)

원래 게시 된 메시지의 큐는 x-dead-letter-exchangex-dead-letter-routing-key으로 설정되어 있지만이 경우에는 충분하지 않습니다.

내 응용 프로그램은 Spring 4 및 Spring Amqp를 사용합니다.

+0

코드를 게시 할 수 있습니까? – Gabriele

답변

0

내가 RabbitMQ 문서와 Spring AMQP에 관한 한, 코드 내부의 조건에 따라 다른 DLQ에 메시지를 보낼 수 없다. 내가 말한 이유는 메시지를 DLQ로 보내야 할 때 코드가 교환이나 라우팅 키를 지정하지 않고 RabbitMQ가 메시지를 게시 할 때 정의 된 것을 사용한다는 것입니다.

그래서, 내가 찾은 유일한 해결책은 다음과 같이 뭔가를 구현하는 것입니다 : 비즈니스 예외가 발생하는 경우

try { try_to_do_useful_stuff(message); } catch (BusinessException e) { resend_the_message_to_business_dlq(message); }

이 방법은, 다음 메시지가 수동으로 비즈니스 DLQ에 전송된다. 물론, 일부 세부 사항은 원래 대기열처럼 길을 잃지 만 사용하지 않으면 문제가되지 않습니다.

비업무 예외가 발생하면 표준 경로를 따르고 재 시도 (구성된 경우) 한 후 정의 된 DLQ로 라우트하십시오.

관련 문제