まず第一に、私は ZeroMQ とメッセージ キュー システムは初めてなので、私がやろうとしていることは別のアプローチで解決できるかもしれません。私は、次のことを行うメッセージング システムを設計しています。
複数のクライアントがブローカーに接続し、処理が必要なアイテムの ID を送信します。クライアントはすぐに切断し、応答を待ちません。
ブローカーはアイテムをワーカーに送信し、ワーカーごとに 1 つのアイテムを送信して何らかの処理を実行します。各リターンは、処理が完了したというシグナルを返します。
要求/応答を正しく処理する基本的なシステム設定がありますが、次のこともできるようにしたいと考えています。
ブローカーにクエリを実行して、ワーカーで実際に実行されているプロセスの数と、単に実行を待機しているプロセスの数を確認します。
ID ごとに 1 つのプロセスのみが実行されていることをブローカーに確認させます。重複する ID が到着し、その項目が現在ワーカーによって処理されていない場合は、それをキューに追加しないでください。
ブローカー/ディーラー ソケットでポーリング セットアップを使用しています。私が使用しているコードは、Ian Barber のこの例とよく似ています。
私の最初の傾向 (zmq での実装方法はわかりませんが) は、受信した ID とワーカーによってアクティブに処理されている ID をブローカーに追跡させることです。ワーカーが実際に処理を実行できるかどうかに関係なく、ブローカーはワーカーにリクエストをすぐに転送するようです。その後、ワーカーは ID をキューに入れ、順番に処理します。これは理想的ではありません。なぜなら、システム内で起こっていることを一元的に監視および制御して信頼性を実現できるようにしたいからです。
とにかく、このタイプのセットアップのヒント、ヒント、または例は大歓迎です。