【问题标题】:ZeroMQ + ReactPHP: Multiple producers (push) and multiple consumers (pull)ZeroMQ + ReactPHP:多个生产者(推)和多个消费者(拉)
【发布时间】:2017-09-09 00:42:34
【问题描述】:

我正在使用reactphp/zmq

如何在多个 pull worker 中拥有多个 push worker,这可能吗?

A only 可以有多拉和单推,如 README 的示例:

$push->connect()
$pull->bind()

或者单拉多推:

$push->bind()
$pull->connect()

当我尝试将两者都设置为connect 拉取不接收消息

否则,尝试使用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

【问题讨论】:

  • 你用这个提议的架构解决了什么问题?为什么需要多个推动器?你不能有多个推动者,然后有随机数量的工人拉。您需要有一个所有工作人员 PUSH 的端点和一个所有工作人员 PULL 的端点。幸运的是,ZeroMQ 支持 TIPC 协议,这使得这很容易,但您最好解释一下什么您正在尝试这样做,以便我们可以建议最佳架构。
  • 我正在构建一个电子邮件验证工具,当添加新列表时,它会启动一个新推送器,将其电子邮件添加到队列中,同时多个拉取器将监听该队列以验证它们。
  • 你有扇出(推动器,提供任务的那个),你有工人,执行任务的那个.您没有队列。 ZeroMQ 是传输层,而不是队列(虽然它在内部使用队列)。您需要的是一个充当队列的中间服务——它接收和发送任务。您的推送者推送到队列,您的拉取者从队列中拉出。该服务将使用pull 接收任务并使用push 将其分发给工作人员。你用push给它任务,用pull从它那里接受任务。
  • 好的,最后我想的这个中间件就是“队列”,对吧?你认为依靠 ZeroMQ 来做这个排队的事情是安全的吗?你会推荐什么?

标签: php message-queue zeromq reactphp


【解决方案1】:
(5555)                      (5556)
push -|  (5555) > (5556)   |- pull
push -|-> pull  &  push <- |- pull
push -|   bind  /  bind    |- pull
connect                    connect

这与 ZMQPoll 的想法非常相似。不好,你不需要使用 reactphp/zmq

您可以使用 ZMQPoll 运行进程。这个进程可以绑定在5555和5556上,其他进程可以推送和拉取消息。

my example how it can be work

more examples on official ZMQ site

PHP example poller from official site

UPD:如果您需要其他解决方案,look at ZMQProxy

【讨论】:

  • 非常感谢,但我认为 Poll 解决了相反的问题。我需要类似:N-1-N 和 Poll 确实:1-N-1,它是一个从多个端点接收的中间件,但是这些端点应该绑定到一个唯一的地址,然后我需要 bind 每次推送并且每个都拉到一个端口。我想connect 一个端口中所有需要的推杆,一个端口中所有需要的拉杆。
  • ZMQPoll 解决了您的问题。您将所有需要的推杆连接到 5555 端口,然后将所有需要的拉杆连接到 5556 端口。但是如果您想要其他解决方案,请查看代理bitbucket.org/snippets/gollariel/8Axx4
【解决方案2】:

啊哈!非常感谢@Mjh 澄清事情。

事实证明,我确实需要中间的一些东西,它应该是一个消息队列代理,而 ZMQ 确实有一些东西。内部调用zmq_proxy 启动rrbroker 循环,不幸的是这些人在reactphp/zmq 中没有抽象,但他们在ext-php 到ZMQDevice

来源:http://zguide.zeromq.org/php:chapter2#ZeroMQ-s-Built-In-Proxy-Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 2015-03-27
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多