2015-01-14 2 views
0

Mule에서 AMQP 커넥터를 사용하고 메시지가 출력 대기열에 쓰지 않고 비즈니스 필터링 기준에 맞지 않는 특정 사용 사례를 얻으려고하면 데드 레터로 라우팅해야합니다 . 이를 달성하는 가장 좋은 방법을 제안하십시오. 샘플 코드 : 메시지가 어떤 메시지 처리부 후속 메시지 실행 안 프로세서 및 메시지 큐의 실패하면 데드 편지 교환기로 전달되어야한다는 기능을 달성하기Mule : Mule을 사용하여 AMQP 끝점에 대한 데드 레터 교환 메시지 전달

<mule> 
<flow> 
<message source> 
<message processor1> 
<message processor2> 
<message processor3> 
<message processor4> 
<message processor5> 
<amqp:outbound-endpoint> 
</flow> 
</mule> 

가장 좋은 방법. 따라서 메시지 처리기 2에서 메시지 처리기가 실패하면 3,4와 5가 실행되어서는 안되며 메시지는 데드 레터 교환으로 라우팅되어야합니다. 메시지가 어떤 단계에서도 실패하지 않으면 대기열에 기록해야합니다.

답변

0

AMQP transport은 수동 메시지 수신 확인 또는 거부 (documentation) 기능을 제공합니다. 메시지를 거부하고 대기열이 DLX를 사용하도록 구성된 경우 메시지는 브로커에 의해 라우트됩니다.

빅터 로메로 (Victor Romero)의 제안에 따라 캐치 예외 전략을 사용하여 흐름을 구성하고 <amqp:reject-message />을 사용하여 메시지를 거부하십시오. ackMode="MANUAL"을 사용하도록 커넥터를 구성해야합니다.

+0

내 디자인의 메시지 프로세서는 특정 로직이 실패하면 예외를 throw해야하고 catch 블록이 아닌 경우 catch-exception 전략에 의해 catch 될 필요가있는 경우 비즈니스 bean을 포함 할 특정 메소드가 실행됩니다. 봄 콩 방법에서 나에게 제공. –

+0

예, 그렇게 작동합니다. 'ackMode = "MANUAL"'을 사용하고 있기 때문에 구성 요소 다음에''를 넣는 것을 잊지 마십시오. –

1

DLQ를 가리키는 아웃 바운드 엔드 포인트를 사용하여 캐치 예외 전략을 설정하기 만하면됩니다.

그러나 개인적으로 나는 개인적으로 DLQ의 토끼 (또는 사용중인 공급자) 기능을 활용하려고합니다 : https://www.rabbitmq.com/dlx.html.

관련 문제