使用zmq(zeromq)检测慢速阅读器

时间:2009-08-21 23:36:34

标签: message-queue zeromq

我正在尝试更换一个小型的自行开发的消息传递系统,并且正在使用zmq进行一些游戏。 我将需要检测慢速读取器,并启动/断开它们 - 慢速读取器几乎意味着特定的消费者队列大小超过某个阈值。

到目前为止,似乎zmq会阻止每个消费者,如果其中一个消费者有点慢(足够公平) - 但是 我找不到任何方法来检测潜在的慢消费者。任何人都有经验 zmq是如何实现的 - 或者是否有任何其他无代理消息传递系统可以重新推荐?

2 个答案:

答案 0 :(得分:3)

从zeromq-2.0.7开始,您可以在ZMQ_HWM套接字上设置ZMQ_PUB选项,以控制可以为订阅者排队的最大邮件数。一旦达到高水位标记,将丢弃发往该用户的所有其他消息,直到队列大小回落到高水位线以下。这限制了专用于慢速阅读器的内存量。

但是,由于ZeroMQ库暴露了套接字而不是客户端,因此无法在不修改库本身的情况下识别并强行断开不需要的客户端。

答案 1 :(得分:0)

ZeroMq指南中有一节关于此,它建议实现一种模式,称为“Suicidal Snail Pattern”。

基本上,它会逆转依赖关系,并试图通过让他们找到一种方法来检测他们是否已成为慢读者,从而说服慢速订阅者断开连接/自杀。