16

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

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

  • 代理将项目发送给工作人员,每个工作人员一个项目,以执行一些处理。每个返回都返回一个处理完成的信号。

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

  • 查询代理以查看有多少进程实际在工作人员上运行,以及有多少只是在等待运行。

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

我正在使用带有经纪人/经销商套接字的投票设置。我使用的代码与Ian Barber 的这个示例非常相似。

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

无论如何,这种设置的任何提示、提示或示例将不胜感激。

4

2 回答 2

18

在我看来,ZeroMQ 最适合用于无代理的设计,该库就是为此设计的。如果您想监控队列中的项目数、吞吐量或其他任何内容,您将不得不自己将其构建到应用程序/设备/生产者中。由于您是消息传递的新手,因此很快就会失控。鉴于此,我建议研究 RabbitMQ(或类似的代理),它将为您提供开箱即用的这些服务。如果您确实采用了 RabbitMQ(或者更确切地说,AMQP),我建议您在上面描述的场景中使用扇出交换。

于 2012-05-21T14:52:59.653 回答
13

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

于 2012-07-18T10:46:27.780 回答