0

私はRabbitMQを初めて使用し、次を実装する方法を考えています:プロデューサーは複数のサイトのタスクを作成します。これらのタスクを1つずつ処理する必要があるコンシューマーがたくさんありますが、並行性が1の1つのサイトとのみ通信します。前のタスクが終了する前に、このサイトの新しいタスクを開始します。このように、遅いサイトはゆっくりと処理され、速いサイトは高速に処理されます (遅いサイトがすべてのワーカー容量を占有するのとは対照的に)。

理想的には、サイトは一度に 1 人のワーカーによってのみ処理され、それが停止すると別のワーカーに置き換えられます。これは専用キューのタスクのように思えますが、新しいキューを一覧表示してサブスクライブする簡単な方法はないようです。RabbitMQ でそのような結果を達成する適切な方法は何ですか?

4

1 に答える 1

1

物事が間違った方向に進んでいる可能性があると思います。ワーカーの場合、1 つの取引所に送信する 1 つ以上のプロデューサーがあります。交換には 1 つのキューがあります (キューに直接送信することもできますが、実際に行っているのはデフォルトの交換を経由することだけです。私は明確にすることを好みます)。すべてのコンシューマーが単一のキューに接続し、順番にタスクを読み取ります。メッセージを削除する前に ACK を要求するようにキューを設定する必要があります。そうすれば、プロセスが停止した場合、キューに戻され、次のコンシューマ/ワーカーによって取得されます。

于 2013-06-24T15:56:44.710 に答える