首先,我是ZeroMQ和消息队列系统的新手,所以我想要做的事情可以通过不同的方法解决。我正在设计一个执行以下操作的消息传递系统:
多个客户端连接到代理并发送需要处理的项目的ID。客户端立即断开连接,不等待响应。
经纪人向工人发送物品,每个工人一件物品,以执行一些处理。每个返回都返回一个处理完成的信号。
我有一个基本的系统设置正在处理请求/回复,但我也希望能够执行以下操作:
查询代理以查看工作人员实际运行的进程数以及等待运行的进程数。
让代理确保每个id只运行一个进程 - 如果有一个重复的id到达并且该项当前没有被worker处理,请不要将它添加到队列中。
我正在使用经纪人/经销商套接字进行民意调查。我正在使用的代码与this example from Ian Barber非常相似。
我的第一个倾向(虽然我不确定如何在zmq中实现它)是让经纪人跟踪已收到的ID以及工作人员正在处理的ID。似乎经纪人立即向工人转发请求,无论他们是否可以实际运行处理。然后,工作人员排队ID并按顺序处理它们。这并不理想,因为我希望能够集中监视和控制系统中发生的事情,以实现可靠性。
无论如何,非常感谢此类设置的任何提示,技巧或示例。
答案 0 :(得分:15)
在我看来,ZeroMQ最适用于无代理设计,为此设计了库。如果要监视队列中的项目数或吞吐量等,您将不得不自己构建应用程序/设备/生产者。由于您是消息传递的新手,因此可能会很快失控。鉴于此,我建议调查RabbitMQ(或类似的经纪人),它将为您提供开箱即用的服务。如果您采用RabbitMQ(或者更确切地说是AMQP),我建议您使用扇出交换来完成上述方案。
答案 1 :(得分:13)
ZeroMQ的Python库似乎带有处理这个问题的模式:http://zeromq.github.com/pyzmq/devices.html#monitoredqueue