耐久性のあるキューとそのバインディングを維持するが、その消費者を一時停止するための最良の方法は何を中断RabbitMQの?キュー消費
ユースケースは次のとおりです。対処できないメッセージ(たとえば、データベースがダウンしているか、スキーマに問題がある)が増え続ける場合は、「クラッシュさせて」メッセージを処理しないようにしたいと思いますが、キューに集約し続けるそれは公開することができますが、消費は中断します。
私は3つの解決策を考えることができます:私はキューにバインドされたすべての消費者が継続的にメッセージや再キューを拒否したが、これは廃棄物資源の一種ではありませんへの言及私はプログラム的に行ういる可能性があり
- 上記のロジック。
- 私はキューにバインドされているすべてのSimpleMessageListenerContainersに
shutdown
を呼び出すことができると思い - それともspring-amqpの面で(下記参照)、すべての消費者に
basic.cancelConsumer
を呼び出すことができます。
#1
メッセージが拒否されているため、既に実行しています。問題は、無限ループの失敗のようになり、失敗した場合にはより多くのリソースを浪費することになります。
#3
は理想的なようだが、私は、すべてのメッセージリスナについて知った後、シャットダウンすることを通知しているか、いくつかに持っています。キューを中断する必要があることを通知するためにファンアウト交換機を使用することができます。私はRabbitMQがこのロジックのために何かを組み込む必要があるように感じます。もう1つの問題は、複数のキューをメッセージコンテナにバインドできることです(すべてのキューを中断する必要はない可能性があります)。 #2
については
私はそのconsumerTag
とcancel the consumerことができます知っているが、私はキューにconsumerTag
のリストを得るのですかどこ(つまり、上記の操作を行うための正しい方法であると仮定した場合)の質問はありますか?
感謝。私は上記のようにウサギで待ち行列を宣言する方法を知っています。それは私がすでに落ちている道である私の消費者を私自身で管理しなければならないように見える。ウサギが管理者の方が賢明にキューの使用を中断することができればうれしいでしょう。 –
接続から唯一できることは、あなたが探しているものではない管理者から強制的に閉じることです –