2016-09-14 79 views
1

當我的郵件沒有傳遞到RabbitMQ服務器時,我正在使用hystrix來處理falback場景。當RabbitMQ服務器關閉時(因爲引發AMQPException),我的回退被調用。 如果代理無法接受/路由消息,則調用returnCallback/returnConfirm(帶有nack)。
我的理解是,RabbitTemplate returnCallbacks/returnConfirms將在不同於Hystrix線程的線程中執行。Spring AMQP:[RabbitTemplate]當RabbitTemplate ReturnCallback被執行時,Hystrix回退沒有被調用

是否有可能在這些情況下拋出異常,以便Hystrix fallback得到執行?

我剛纔提到這些Q記者:Spring AMQP return callback vs retry callback

Spring RabbitTemplate- How to get hold of the published message for NACKs in Publisher confirm mode

任何指針處理這種情況是非常讚賞。

回答

1

否;返回是完全異步的;即使啓用事務 - 從the rabbit mq documentation ...

AMQP當錯誤(例如缺少權限的,未知的交流參考)在交易basic.publish和basic.ack命令應該檢測不指定。 RabbitMQ立即(而不是在提交時)執行必要的檢查,但請注意basic.publish和basic.ack都是異步命令,因此任何錯誤都會異步地報告給客戶端。

如果發佈到一個不存在的交流(和setChannelTransacted(true) *),你會得到提交例外,但發佈到沒有路由的隊列中的交換將永遠不會得到一個異常(僅異步回回調) 。

  • 使交易是相當昂貴的所有操作因此請慎重考慮,如果你想趕上這個特定的情況下
+0

此信息真的很有幫助。感謝這些有價值的信息。 – Shishir

相關問題