如何监控/管理ZeroMQ中的队列?

时间:2012-05-20 21:45:39

标签: zeromq

首先,我是ZeroMQ和消息队列系统的新手,所以我想要做的事情可以通过不同的方法解决。我正在设计一个执行以下操作的消息传递系统:

  • 多个客户端连接到代理并发送需要处理的项目的ID。客户端立即断开连接,不等待响应。

  • 经纪人向工人发送物品,每个工人一件物品,以执行一些处理。每个返回都返回一个处理完成的信号。

我有一个基本的系统设置正在处理请求/回复,但我也希望能够执行以下操作:

  • 查询代理以查看工作人员实际运行的进程数以及等待运行的进程数。

  • 让代理确保每个id只运行一个进程 - 如果有一个重复的id到达并且该项当前没有被worker处理,请不要将它添加到队列中。

我正在使用经纪人/经销商套接字进行民意调查。我正在使用的代码与this example from Ian Barber非常相似。

我的第一个倾向(虽然我不确定如何在zmq中实现它)是让经纪人跟踪已收到的ID以及工作人员正在处理的ID。似乎经纪人立即向工人转发请求,无论他们是否可以实际运行处理。然后,工作人员排队ID并按顺序处理它们。这并不理想,因为我希望能够集中监视和控制系统中发生的事情,以实现可靠性。

无论如何,非常感谢此类设置的任何提示,技巧或示例。

2 个答案:

答案 0 :(得分:15)

在我看来,ZeroMQ最适用于无代理设计,为此设计了库。如果要监视队列中的项目数或吞吐量等,您将不得不自己构建应用程序/设备/生产者。由于您是消息传递的新手,因此可能会很快失控。鉴于此,我建议调查RabbitMQ(或类似的经纪人),它将为您提供开箱即用的服务。如果您采用RabbitMQ(或者更确切地说是AMQP),我建议您使用扇出交换来完成上述方案。

答案 1 :(得分:13)

ZeroMQ的Python库似乎带有处理这个问题的模式:http://zeromq.github.com/pyzmq/devices.html#monitoredqueue