【发布时间】:2023-03-13 16:35:02
【问题描述】:
我尝试使用 ZMQ - PUSH - PULL 来构建分布式任务处理系统。在 Java 中使用带有队列和侦听器的 JMS 是一种东方做法;空闲的侦听器可以获取队列的消息并执行它。一旦队列分布在节点之间,这就像一个负载均衡器。
使用 ZMQ(使用 Python - 现在不想使用 Celery),我正在尝试 PUSH 和 PULL。工人有不同的处理时间。然而,即使工人有空,任务也会以严格的循环方式进行。这与工人是否空闲无关,任务以循环方式进行。
有没有办法用 ZMQ 模式模拟分布式队列,这样我就可以在每个节点中有一个工作人员池“轮询”队列,并且任何空闲的工作人员都可以从队列中提取消息并进行处理。
【问题讨论】:
-
是的。有很多你正在寻找的例子in the guide,我强烈建议你阅读它。
-
我正在阅读它几天现在正在尝试 - github.com/alexcpn/DisProcessor 也是,它正在工作;问题是盲循环,问题是负载均衡
-
你根本不想要循环,你想要一个空闲的工作人员在准备好时“请求”工作,而经纪人在有一些工作时“回复”第一个请求工作的工作人员。 . 确保您正在阅读 chapter 4, reliable request/reply patterns,从 simple pirate pattern 开始并继续阅读,直到您看到最适合您的场景的模式。