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