1

を介して取引所に接続しているクライアントがいくつかありますautodelete:yes。これらはすべて発行者と消費者です。しかし、基本的に今のところ、彼らがメッセージを公開していると仮定しましょう。各クライアントには一意のバインディングキーがあるため、これらのマシンを使用するマシン上の各メッセージに対して明示的な処理を実行できます。すべてが正常に動作します。

クライアントがクラッシュした場合、または手動で(SIGINT、ctrl + cを使用して)終了した場合、キューは削除されます。キューが削除されたことをリモートマシンのコンシューマーに通知する方法はありますか?

クライアントアプリケーションでシグナルハンドラーを作成することを考えているので、SIGINTまたはSIGTERMをキャッチするたびに、リモートコンシューマーに通知します(一意のIDを持つキューが送信されることを通知します)。削除されます)

これを行う他の方法はありますか、それとも私の方法はこれを行う正しい方法ですか?

4

1 に答える 1

1

メッセージングの一般的な規則として、消費側アプリケーションは生成側アプリケーションのステータスを気にしません。

RabbitMQ では、生成アプリケーションは、2 つのメカニズムのいずれかを介して、消費アプリケーションのステータスを認識できます。最初の(そして推奨される)方法は、Dead-Letter Exchange (dlx). メッセージを配信できない場合 (送信先キューが存在しないため)、メッセージはここにルーティングされ、アプリケーションは DLX で構成されたキューからメッセージをプルして、送信先に到達しなかったかどうかを確認できます。 .

2 番目の方法はMandatory、メッセージにフラグを設定することです。これにより、送信先キューが存在しなくなった場合に、ブローカは Basic.Return メソッドを介して生成アプリケーションにメッセージをすぐに送り返します。

上記の項目がニーズを満たさない場合は、アプリケーションを設計するためのより良い方法がある可能性があるため、アーキテクチャを再検討することをお勧めします。

于 2013-03-20T23:20:51.770 に答える