1

MQにメッセージを送信するサーバーがあります。ワーカーが応答すると、メッセージがキューから削除されます。

channel.basic_ack(delivery_tag=method_frame.delivery_tag)

しかし、ワーカーがエラーを生成するとき、それは良い配達について答えません。このメッセージを他のワーカーにルーティングするか、このメッセージをキューの最後に送信して後で再試行することは可能ですか。RabbitMQには、メッセージのタイムアウトを設定するメカニズムがありますか。タイムアウトが過ぎたら、メッセージをワーカーにもう一度送信してみてください。それとも、自分で実装する必要がありますか?

4

1 に答える 1

1

ワーカーがメッセージを確認しない場合、メッセージはキューから削除されませんが、ワーカーとrabbit-mq間の接続が存続する場合、rabbit-mqは、メッセージがワーカーのバッファーにないことを知る方法がありません。

これを解決するにはいくつかの方法があり、主にアプリケーションの構造に依存します。

最も簡単なのは、プリフェッチを1に設定し、問題が発生したときに必ずrabbitmqとワーカー間の接続をリセットすることです。

メッセージのナッキングを調べることもできますが、これによってメッセージが再キューイングされるかどうかはわかりません。

もちろん、あなたが言うように、別のキューに入ったというメッセージなどを送信することもできます。ただし、メッセージをACKしないと、実際に思っているよりも大きなキューになることに注意してください。これは、ウサギがackされない限り、キューからアイテムを削除しないためです(実際、これは、メッセージの構成によって異なります。列)。

于 2012-12-21T10:43:19.487 に答える