【问题标题】:How can I monitor/manage queue in ZeroMQ?如何在 ZeroMQ 中监控/管理队列?
【发布时间】:2012-05-27 11:53:42
【问题描述】:

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

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

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

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

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

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

    李>

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

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

无论如何,对于此类设置的任何提示、提示或示例将不胜感激。

【问题讨论】:

  • 只是想一想,zmq 是相当准系统/轻量级的,也许你应该看看像 activemq、rabbitmq 或 openmq 这样的产品,它们具有广泛的管理可能性。像 activemq 和 openmq 这样的产品非常以 java 为中心,但它们对许多编程语言都有非常好的功能绑定。
  • @fvu - 谢谢 - 我曾希望让 zmq 运行,但会检查其他一些库 - 特别是我认为 RabbitMQ 可能会工作。

标签: zeromq


【解决方案1】:

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

【讨论】:

  • +1 你对 zeromq 的看法是对的,但我会使用 zeromq 和 rabbitmq,使用 rabbit 作为队列服务器和 zeromq 消息代理。
【解决方案2】:

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

【讨论】:

  • 谢谢!该文档绝对有帮助。我刚刚使用 RabbitMQ 完成了这个设置,这似乎是一个不错的解决方案,但灵活性稍差。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 2021-09-17
  • 1970-01-01
  • 2017-09-18
  • 2016-10-16
  • 2015-09-18
  • 1970-01-01
相关资源
最近更新 更多