我正在尝试更换一个小型的自行开发的消息传递系统,并且正在使用zmq进行一些游戏。 我将需要检测慢速读取器,并启动/断开它们 - 慢速读取器几乎意味着特定的消费者队列大小超过某个阈值。
到目前为止,似乎zmq会阻止每个消费者,如果其中一个消费者有点慢(足够公平) - 但是 我找不到任何方法来检测潜在的慢消费者。任何人都有经验 zmq是如何实现的 - 或者是否有任何其他无代理消息传递系统可以重新推荐?
答案 0 :(得分:3)
从zeromq-2.0.7开始,您可以在ZMQ_HWM
套接字上设置ZMQ_PUB
选项,以控制可以为订阅者排队的最大邮件数。一旦达到高水位标记,将丢弃发往该用户的所有其他消息,直到队列大小回落到高水位线以下。这限制了专用于慢速阅读器的内存量。
但是,由于ZeroMQ库暴露了套接字而不是客户端,因此无法在不修改库本身的情况下识别并强行断开不需要的客户端。
答案 1 :(得分:0)
ZeroMq指南中有一节关于此,它建议实现一种模式,称为“Suicidal Snail Pattern”。
基本上,它会逆转依赖关系,并试图通过让他们找到一种方法来检测他们是否已成为慢读者,从而说服慢速订阅者断开连接/自杀。