私はreactphp/zmqを使用しています。ZeroMQ + ReactPHP:複数の生産者(プッシュ)と複数の消費者(プル)
複数のプルワーカーに複数のプッシュワーカーを配置するにはどうすれば可能ですか?私はconnect
としての両方を設定しようとすると
$push->bind()
$pull->connect()
:
$push->connect()
$pull->bind()
またはシングルプルとマルチプッシュ:
Aのみマルチプルとシングルプッシュ、READMEの例のように持つことができますプルはメッセージを受け取りません。
そうでなければ、それはスローbind
で複数のプロセスを開始しようとしている:
ZMQSocketException: Failed to bind the ZMQ: Address in use
私は、ミドルウェアを持っているべきですか?
(5555) (5556)
push -| (5555) > (5556) |- pull
push -|-> pull & push <- |- pull
push -| bind/bind |- pull
connect connect
提案されたアーキテクチャで何を解決していますか?なぜあなたは複数のプッシャーを持つ必要がありますか?あなたは複数のプッシャーを持つことはできません。すべてのワーカーがプッシュしている単一のエンドポイントと、すべてのワーカーがプルする単一のエンドポイントが必要です。幸運にも、ZeroMQはこれを簡単にする 'TIPC'プロトコルをサポートしていますが、正確にあなたがしようとしているものを説明して、最適なアーキテクチャを提案できるのは賢明でしょう。 – Mjh
私は、新しいリストが追加されたときに、複数のプルーアがそれらを検証するためにそのキューをリッスンしている間、電子メールをキューに追加する新しいプッシャを起動する電子メール検証ツールを構築しています。 –
あなたはファンアウト(プッシャー、**は**仕事を与えているもの)を持っていて、あなたは仕事をしている人、**仕事をしている人**を持っています。 **あなたはキューを持っていません**。 ZeroMQはキューではなくトランスポート層です(キューを内部的に使用します)。あなたが必要とするのは、待ち行列の役割を果たす真ん中のサービスです。それはタスクを受け取り、送信します。あなたのプッシャーはキューにプッシュし、プルーファーはキューからプルします。そのサービスは、タスクを受け取るために「プル」を使用し、それを労働者に渡すために「プッシュ」する。 'push'を使ってタスクを与え、' pull'を実行してタスクを実行します。 – Mjh