2015-01-14 61 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

在我設計的消息處理器將春豆和具體的方法將被執行將包含業務邏輯,如果某些邏輯失敗我需要拋出異常,並將被騾catch-exception策略捕獲如果catch塊不是由我在spring bean方法中提供。 –

+0

是的,這就是它的工作原理。請記住在組件後面放置一個'',因爲你使用'ackMode =「MANUAL」'。 –

1

爲了完成您期望的操作,只需設置一個catch-exception-strategy與出站端點指向您的DLQ。

但是,我個人寧願使用DLQ的兔子(或您正在使用的提供者)功能:https://www.rabbitmq.com/dlx.html