我试图使用ZMQ推拉来构建一个分布式任务处理系统。这是在Java中通过队列和侦听器使用JMS实现的;空闲的侦听器可以接收队列的消息并执行it.Once --队列是跨节点分布的,这就像负载平衡器一样。
使用ZMQ (使用Python -不想现在使用芹菜),我正在尝试推拉。有不同的处理时间的工人。然而,即使是当一个工人是自由的,任务是严格循环的方式。这就是说,不管工人是否自由,任务都是以循环的方式进行的。
有什么方法可以用ZMQ模式来模拟分布式队列吗?这样,我就可以在每个节点中有一个工人‘轮询’队列,并将消息从队列中取出并处理。
发布于 2016-01-20 09:12:10
正如0MQ创始人彼得·辛詹斯在这个答案中指出的那样,推挽机制不是一个负载均衡器,而是一个简单的循环分配器。这是docs 还在那里中的一个错误。
尽管如此,对于负载平衡模式,您需要在体系结构的中间添加一个broker。正如杰森在评论中指出的那样,这一点在官方指南中得到了很好的解释。Python中也有一些例子。

主要的想法是让工人在他们自由地获得更多的工作时,向经纪人发送一个小的“就绪”消息。代理轮流保存“指针”以释放队列中的工作人员。当他从客户端接收到一个新的作业请求时,他也会将该请求传播到队列中的第一个空闲工作人员,这将从队列中弹出。正如您在上面的图片中所看到的,代理利用路由器套接字来避免阻塞行为并获得适当的负载平衡。一个小的附加细节是,如果队列中没有空闲的工作人员,代理不会轮询客户端。
这是我所知道的用ZeroMQ实现负载平衡模式的最简单方法。这与队列中新作业的“轮询”并不完全一样,但我认为这正是您所需要的。另外,请注意这是--实际上是--最简单的方式,即它根本不可靠,而且不像现在这样扩展得很好。如果您也需要可靠性,我建议您彻底阅读官方指南第四章。
顺便提一句,也许你应该认真考虑芹菜来完成这项任务。我真的爱上了ZeroMQ,然而这正是芹菜非常擅长的东西,在我看来,学起来并不像有人可能会认为那样难。
https://stackoverflow.com/questions/31248615
复制相似问题