プロジェクトでrabbitmqを使用しますが、開発マシンでデバッグしたいという問題に直面しているため、最初に要求メッセージを送信するマシンに応答メッセージを送信する必要があります。それをどのように達成するのか、spring-rabbitmq フレームワークに既存のソリューションはありますか?
私たちはいくつかの解決策を検討しました。マシンごとに一連のキューを宣言するなど、キュー名のプレフィックスをマシン名で指定します。それは実現可能ですか?
プロジェクトでrabbitmqを使用しますが、開発マシンでデバッグしたいという問題に直面しているため、最初に要求メッセージを送信するマシンに応答メッセージを送信する必要があります。それをどのように達成するのか、spring-rabbitmq フレームワークに既存のソリューションはありますか?
私たちはいくつかの解決策を検討しました。マシンごとに一連のキューを宣言するなど、キュー名のプレフィックスをマシン名で指定します。それは実現可能ですか?
一連のキュー (デバッグ キュー AZ) を定義し、それらをx-match=any, from=[A-Z], to=[A-Z]
それぞれ属性を持つヘッダー交換にバインドします。次に、ヘッダー交換をメインの作業交換(1 つ以上) にバインドして、関心のあるすべてのメッセージを受信します。これにより、コンシューマーが応答を発行すると、デバッグ交換に複製され、適切なキューにルーティングされます。
[sender X] [ worker ] [consumer on queue X]
| ^ |
[request] | [response from=X, to=X] [duped request from=X|
\ | | [duplicated response from=X, to=X]
\ [request from=X] | ^
v | V |
[working topic exchange] -------> [debug headers exchange]
/ | \ / | \
{bindings by routing key mask} {bindings by any headers from=[A-Z], to=[A-Z]}
/ | \ / | \
[working queue 1] ... [working queue N] [debug queue A] ... [debug queue Z]
リクエストおよびレスポンス メッセージをバインドするにはapplicationId
、およびcorrelationId
メッセージ属性を使用できます。
要求メッセージと応答メッセージの両方がデバッグ キューに複製されることに注意してください。x-match=all, from=[A-Z]
またはのような特定のヘッダーのみに一致するようにキューをバインドし、x-match=all, to=[A-Z]
そのヘッダーのみ (のみfrom
またはのみto
) で応答メッセージと要求メッセージを発行することにより、要求メッセージと応答メッセージに個別のキューを指定することもできますが、それはあなた次第です。
長所:
短所:
または、デバッグ プロセスでリアルタイムの応答受信が必要な場合は、何らかの方法でRPCパターンを利用できます。ただし、これにより、応答が処理されるまでパブリッシャーがブロックされます。これは、実際のアプリの使用とは異なり、ビジネス ロジックが壊れる可能性があります。
長所:
短所:
ps: ASCII グラフで申し訳ありません