2016-09-14 9 views
1

メッセージがRabbitMQサーバーに配信されないときにhystrixを使用してフォールバックシナリオを処理しています。 RabbitMQサーバーが停止しているとき(AMQPExceptionがスローされたとき)にフォールバックが呼び出されます。 ブローカがメッセージを受け入れ/ルーティングできない場合、returnCallback/returnConfirm(nackとともに)が呼び出されます。
私が理解することは、RabbitTemplateのreturnCallbacks/returnConfirmsがHystrixスレッドとは異なるスレッドで実行されるということです。Spring AMQP:[RabbitTemplate] RabbitTemplate ReturnCallbackが実行されたときにHystrixフォールバックが呼び出されない

Hystrixフォールバックが実行されるように、これらのシナリオでExceptionをスローすることは可能ですか?

私は、これらのqのを参照しています

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

このシナリオを処理するために、任意のポインタSpring AMQP return callback vs retry callbackがはるかに高く評価されます。

答えて

1

いいえ;リターンは完全に非同期です。あなたが取引可能にしても - the rabbit mq documentationから...

をトランザクションbasic.publishとbasic.ackコマンドのエラー(アクセス権の例えば不足、未知の交流への参照)が検出されなければならないとき、AMQPが指定されていません。 RabbitMQはコミット時に必要なチェックを直ちに実行しますが、basic.publishとbasic.ackの両方が非同期コマンドであるため、エラーはすべて非同期でクライアントに返されます。

あなたは存在しない交流に公開した場合(およびsetChannelTransacted(true) *)あなたがコミット時に例外が発生しますが、いないルーティング可能なキューとの交流にパブリッシュすると、例外(のみ非同期リターンコールバック)を取得することはありません。トランザクションを有効に

  • すべての操作のために非常に高価であるので、それはあなたがこの特定のシナリオに
+0

をキャッチしたい場合は、この情報は本当に便利で、慎重に検討してください。この貴重な情報をありがとう。 – Shishir

関連する問題