2017-02-10 4 views
0

私はPULLを介して受信しているワーカーにメッセージを送信するためにPUSHソケットを使用しています。そのため、メッセージはワーカー間で均等に分散されます。しかし、特定のメッセージを処理するために一部のワーカーを使用したいと思います。 PUSH/PULLメソッドでは、各作業者に特別な処理はありません。すべて同じです。私はフィルタを使っているのでPUB/SUBを使っていますが、自動的に作業者に配布する方法はありません。一連のワーカーがメッセージAを処理することを意図している場合、すべてのワーカーはそれを受け取ります。それは良いことではありません。ZeroMQ PUSH SocketをPULLすることはできますが、PUB/SUBのようなフィルタを使用できますか?

完璧な方法は、Aワーカーが意図したメッセージだけをPULLすることができ、B PULLメッセージをBに向けることです。たとえば、セットAのポートと、セットBは、しかし、それは非常に1つのソケットのためのこのソリューションを持っているエレガントだろう、私はまた、それは開発者によって行うことができなかった理由はない参照してください。

既存のバージョンのZeroMQでこれを行う方法はありますか?

基本的な考え方は、(PUBと同じように)エンベロープされたメッセージを送信するPULLは1つだけであり、ワーカーはこのエンベロープでメッセージをPULLすることができます。ワーカーがすべてのメッセージをプルしてそのメッセージが意図されているかどうかを確認することができますが、受信メッセージの処理と再ブロードキャストが必要になるため、廃棄されません。

答えて

0

本質的に、あなたはこの機能を自分で実装する必要があると思います。私はそれがこのように見えると想像します...

通常のようにPUSH/PULLアーキテクチャを実装します。しかし、ワーカーが処理できないメッセージを受け取った場合、ワーカーは次のワーカーにそのメッセージを伝えるようにメッセージを送信します。これは、メッセージが処理できる作業者にメッセージが届くまで、本質的に起き続けるでしょう。この作業を行うには、メッセージを元に戻して、メッセージを処理できるかどうかを知らせる方法が必要です。これを行うには、ROUTER/DEALERのアーキテクチャを調べるか、ソースをSUBとしてセットアップして、メッセージを処理できるかどうかを示すワーカーからのメッセージを待ちます。

0

あなたはこれを行うことができます:

PUB元のメッセージを2 SUB(A/B)のメッセージを適切そのフィルタに。そして、これらの2つのSUBソケットは、適切なPULLワーカーに送信する2つのPUSHソケットに接続できます。

私はこのパターンをプロダクションで使用しており、うまく機能します。

関連する問題