【发布时间】: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