1

パブリッシャー (RabbitMQ .NET クライアントを使用) と複数のコンシューマー (Pika Python モジュールを使用) があります。それらは単一のトピック交換を使用しており、コンシューマーは個別のキューを持っています。続行またはタイムアウトする前に、応答 (JSON) を待つ必要がある分散 RPC スタイルの呼び出しを実現したいと考えています。

メッセージを公開するときは、メッセージを受け取った「すべての」クライアントからの返信を待つ必要があります。(おそらくパブリッシャー側の単一のコンシューマーに。) ルーティング キーを使用してメッセージをパブリッシュするため、パブリッシュする前にリッスンしているコンシューマーの数はわかりませんが、任意の数のクライアントを待機する必要があります。

これは、リクエストを処理していることをユーザーに通知し、リクエストが完全に実行されたかどうかをフィードバックするためのものです。

RabbitMQ でこれを達成する方法はありますか? ブローカーの特定の RESTful API を使用して消費者名/消費者数を取得し、ループで待機したくありません。

4

1 に答える 1

0

どうやら、このタスクは AMQP だけでは不可能です。RabbitMQ の API を使用する必要がありました。

次のアドレスに GET リクエストを行うhttp://rabbitmq_hostname:15672/api/exchanges/%2F/worker/bindings/sourceと、vhost / 内の交換「worker」のすべてのコンシューマーが返されます。(これは %2F としてエンコードされました)

個別のキューを持つコンシューマーの数を取得するのは、次のように簡単です。

jsonResponse.Where(o => o["destination_type"] == "queue").Count();

トピック エクスチェンジにメッセージを送信すると、予想される応答の数がわかります。

于 2014-02-15T16:10:29.280 に答える