web-dev-qa-db-ja.com

ZeroMQでキューを監視/管理するにはどうすればよいですか?

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

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

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

リクエスト/返信を正しく処理する基本的なシステム設定がありますが、次のこともできるようにしたいと思います。

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

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

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

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

とにかく、このタイプのセットアップのヒント、ヒント、または例をいただければ幸いです。

16
jonstjohn

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

16
Shaun

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

13
Ztyx