1

キューに発行する予定のリクエストがたくさんあります。

いくつかの異なるサブスクライバー タイプがあり、それぞれが独自のラウンド ロビン プールにあります。

たとえば、Request1 はキューにプッシュされます

LoggingSubscriber1 と LoggingSubscriber2 はどちらも "LoggingSubscriber" サブスクリプション ID でサブスクライブするため、そのうちの 1 つだけが要求を受け取ります。

DoProcessSubscriber1、DoProcessSubscriber2、および DoProcessSubscriber3 などの他のグループがあります。

そして別の DoOtherProcessSubscriber1、DoOtherProcessSubscriber2

3 つのサブスクライバー (Logging、DoProcess、および DoOtherProcess) がすべて完了したことを知る何らかの方法が必要です。これにより、何らかのアクションを実行できるようになります。たとえば、すべての要求が完了したというメッセージをクライアントに送信するなどです。

このような回答をどのように集計しますか? 各サブスクライバーに応答オブジェクトをキューに入れることを考えていましたが、それらがすべて完了したことを知る方法はまだわかりません。

4

1 に答える 1

1

理想的には、EasyNetQ に組み込まれている要求/応答パターンを使用しますが、これは単一の (潜在的にファーム化された) コンシューマー向けに設計されています。複数のキューにバインドすることはできません。あなたの場合、おそらくクライアントに返信用のサブスクリプションを設定してもらい、3 つのサービスすべてが完了したらメッセージを発行するようにする必要があります。その後、クライアントは 3 つすべてからの応答があるまで待ってから更新できます。

ただし、デザインを再考することをお勧めします。サブスクライバーの完了を確認する責任をクライアントに持たせることで、非常に緊密に結合されたシステムを構築できます。結果整合性の概念を採用すると、メッセージング システムの設計ははるかにうまく機能します。クライアントが起動して忘れることを許可し、いくつかの監査プロセスを実行して、予想されるすべての処理が最終的に行われたことを確認します。

于 2013-10-14T08:24:38.413 に答える