2017-11-08 6 views
0

RabbitMQとMassTransitを使用したpub/subメッセージングを使用して複数の.Netモジュールを統合しています。メッセージサブスクリプションのほとんどは耐久性があります。しかし、一部は一時的である。消費者が死亡した場合、メッセージは保存されず、すでにキューに入れられたメッセージは破棄される。耐久性と一時的なサブスクリプション

各モジュールでは、2つの受信エンドポイントで1つのバスを作成します。 1つは、耐久性のある、自動でない削除として設定されています。もう1つは非耐久性と自動削除として設定されています。それぞれが独自の消費者を獲得しています。これは期待どおりに動作します。

今、私は要求/応答メッセージを実装しようとしています。ここで問題が発生するのは、送信者がどの交換先に接続するかを決定する必要があるからです。受信者に耐久性のあるキューや一時的なキューを使用するかどうかを判断させてもらうのは間違っています。

私の質問:

  1. は、同時に耐久性と一時的なサブスクリプションをサポートするために、どのように良い方法はありますか?

  2. なぜMassTransitバインディングメッセージがエンドポイントキューにバインドされているエンドポイントエクスチェンジに交換されていますか?メッセージ交換をエンドポイントキューに直接バインドできないのはなぜですか?

  3. 1つのモジュール内のすべてのリクエストコンシューマが耐久性または一時性のいずれかであると仮定します。耐久性のあるキューまたは一時的なキューのいずれかにバインドされる1つの「モジュール」 - エクスチェンジを宣言することは可能ですか?したがって、送信側はモジュール交換をアドレス指定し、モジュールはバインドするキューを決定します。 MassTransitにそうするよう説得するには? enter image description here

  4. モジュールは、モジュールの再起動とブローカで存続する永続サブスクリプションを使用しています。しばらくすると、管理者(システムの実行時に)がこのモジュールをシステムから切り離すことを決定します。モジュールが何とかすべてのアクセスを解除し、MassTransitに耐久性のある交換とキューを削除させることはできますか?

答えて

0

あなたの質問は、未知のエンドポイントに送信された要求/応答から始まり、交換を取り除くことで終了します。これらは別のものだと思います。

私はポイント・バイ・ポイントで答えることができません。ちょうど物をクリアしようとします。

リクエスト/レスポンスの定義では、送信先を知る必要があります。 MassTransitの規約に従って、エンドポイントアドレスは常に交換/キューのペアアドレスです。したがって、受信者にこのメッセージを処理する人を決定させることはできません。送信先のエンドポイントの交換キューに配信されます。

「脱退」について - MassTransitは何も削除しません。手動で使用されていないバインディングまたは管理APIを使用してバインディングをクリーンアップする必要があります。

+0

私はそこにたくさんのものを入れました。一般的な話題は耐久性のある一時的なサブスクリプションです... req/resの既知のアドレスが必要であることを理解しています。私はただ1つのアドレスを送信者に与えて、受信者にそれが耐久性のあるキューまたは一時的なキューにキューイングされているかどうかを判断させたい(私は画像で質問を更新した)。質問は、1つの交換と2つのキューを作成するためにMTをカスタマイズできるかどうかです。 MTコードを見ると、エンドポイント作成コードの半分を変更して、それが後で動作するかどうか確かではないようです。 – Dietatko

+0

私は実際に3番目のエンドポイントを作成できます。しかし、それは複雑になり始め、私は見ていないより良い方法があると思う。 BTW Thxは、退会中の回答です。質問4に完全に答えます。 – Dietatko

+0

各受信エンドポイントは、1つのエクスチェンジャーとエンドポイント名を持つ1つのキューの組み合わせです。 –

関連する問題