16

まず第一に、私は ZeroMQ とメッセージ キュー システムは初めてなので、私がやろうとしていることは別のアプローチで解決できるかもしれません。私は、次のことを行うメッセージング システムを設計しています。

  • 複数のクライアントがブローカーに接続し、処理が必要なアイテムの ID を送信します。クライアントはすぐに切断し、応答を待ちません。

  • ブローカーはアイテムをワーカーに送信し、ワーカーごとに 1 つのアイテムを送信して何らかの処理を実行します。各リターンは、処理が完了したというシグナルを返します。

要求/応答を正しく処理する基本的なシステム設定がありますが、次のこともできるようにしたいと考えています。

  • ブローカーにクエリを実行して、ワーカーで実際に実行されているプロセスの数と、単に実行を待機しているプロセスの数を確認します。

  • ID ごとに 1 つのプロセスのみが実行されていることをブローカーに確認させます。重複する ID が到着し、その項目が現在ワーカーによって処理されていない場合は、それをキューに追加しないでください。

ブローカー/ディーラー ソケットでポーリング セットアップを使用しています。私が使用しているコードは、Ian Barber のこの例とよく似ています。

私の最初の傾向 (zmq での実装方法はわかりませんが) は、受信した ID とワーカーによってアクティブに処理されている ID をブローカーに追跡させることです。ワーカーが実際に処理を実行できるかどうかに関係なく、ブローカーはワーカーにリクエストをすぐに転送するようです。その後、ワーカーは ID をキューに入れ、順番に処理します。これは理想的ではありません。なぜなら、システム内で起こっていることを一元的に監視および制御して信頼性を実現できるようにしたいからです。

とにかく、このタイプのセットアップのヒント、ヒント、または例は大歓迎です。

4

2 に答える 2

18

私の意見では、ZeroMQ は、ライブラリが設計されているブローカーレス設計で最もよく使用されます。キュー内のアイテム数やスループットなどを監視したい場合は、それをアプリケーション/デバイス/プロデューサーに自分で組み込む必要があります。あなたはメッセージングに慣れていないので、すぐに手に負えなくなる可能性があります. これを踏まえて、すぐにこれらのサービスを提供するRabbitMQ(または同様のブローカー)を検討することをお勧めします. RabbitMQ (またはむしろ AMQP) を採用する場合は、上記のシナリオでファンアウト交換を使用することをお勧めします。

于 2012-05-21T14:52:59.653 に答える
13

ZeroMQ の Python ライブラリには、これを処理するためのパターンが付属しているようです: http://zeromq.github.com/pyzmq/devices.html#monitoredqueue

于 2012-07-18T10:46:27.780 に答える