ZMQ对epubm的PUB/SUB有什么可靠性保证(如果有的话)?

sco*_*ott 12 zeromq

我有一个应用程序将epgm PUB套接字上的消息发送到一个或多个epgm SUB套接字.事情大多数都有效,但是如果订阅的应用程序留下足够长的时间,通常会丢失一条消息或一些消息.(我的消息有序列号,所以我可以判断是否有任何缺失或乱序.)根据我对ZMQ文档的阅读,我会认为epgm的"可靠多播"性质会阻止这种情况发生,在SUB套接字获得一条消息之后,它保证在关闭之前一直保持这种状态,或者直到主要的网络故障(即连接被最大化).

无论如何,这就是上下文,但问题只是标题:ZMQ对epubm的PUB/SUB有什么可靠性保证(如果有的话)?

Ste*_*e-o 10

ZeroMQ中的PGM实现使用内存窗口进行恢复,因此只是短暂的.如果由于窗口耗尽而导致恢复失败:例如发布比恢复转换更快,则底层PGM套接字将重置并继续尽力而为.

这意味着在高数据速率或重大数据包丢失时,传输将不断重置,您将丢弃无法恢复的消息:因此无法保证可靠的传输.

PGM配置以实时广播为目标,使得慢速接收器不能使发送器停顿.该协议确实支持这两种范例,但由于缺乏需求,后者尚未实施.

  • OpenPGM日志记录提供了许多对我来说毫无意义的信息.但是我将ZMQ_RECOVERY_IVL提高到100秒,将ZMQ_SNDBUF和ZMQ_RCVBUF提高到10 MB,这导致可靠性大幅提升. (2认同)

min*_*nrk 5

ZeroMQ只提供一个保证:所有消息都已完成 - 您永远不会收到部分消息.它不能保证可靠性.您应该查看高水位线(HWM)行为的文档,这是丢弃消息的最常见原因,如自杀性蜗牛所示.

  • EPGM 不是“可靠的多播”吗?如果它实际上并不能让您获得可靠性,为什么还要通过 ZMQ 提供该协议。为什么不只通过原始 UDP 套接字支持多播? (2认同)