我有一个应用程序将epgm PUB套接字上的消息发送到一个或多个epgm SUB套接字。事情大多数都有效,但是如果订阅的应用程序留下足够长的时间,通常会丢失一条消息或一些消息。 (我的消息有序列号,所以我可以判断是否有任何缺失或乱序。)根据我对ZMQ文档的阅读,我会认为"可靠的多播" epgm的性质可以防止这种情况发生,在SUB套接字获得一条消息之后,它会保证在关闭之前一直保持这种状态,或直到主要网络出现故障(即连接最大化)。
无论如何,这是上下文,但问题只是标题:ZMQ在epgm上为PUB / SUB做出了什么样的可靠性保证(如果有的话)?
答案 0 :(得分:8)
ZeroMQ中的PGM实现使用内存窗口进行恢复,因此只是短暂的。如果由于窗口耗尽而导致恢复失败:例如发布比恢复转换更快,则底层PGM套接字将重置并继续尽力。
这意味着在高数据速率或重大数据包丢失时,传输将不断重置,您将丢弃无法恢复的消息:因此无法保证可靠的传输。
PGM配置的目标是实时广播,这样慢速接收器无法阻止发送方。该协议确实支持这两种范式,但后者由于缺乏需求而未实施。
答案 1 :(得分:5)
ZeroMQ只提供一个保证:所有消息都已完成 - 您永远不会收到部分消息。它不能保证可靠性。您应该查看高水位线(HWM)行为的文档,这是丢弃消息的最常见原因,如the suicidal snail所示。