What guarantee of reliability (if any) does ZMQ for PUB / SUB over epgm?

I have an application sending messages to the Pub epgm socket for one or more SUB sockets. Things basically work, but if the subscription application remains long enough, it will usually not receive a message or several messages. (My messages have serial numbers, so I can tell if any of them are missing or out of order.) Based on my reading of ZMQ docs, I would have thought that the “reliable multicast” nature of epgm would prevent this from happening after The SUB socket receives one message, it guarantees that it will receive them until it is turned off or until the main network problems are resolved (that is, the connection is exceeded).

In any case, this context, but the question is just the headline: what guarantee of reliability (if any) does ZMQ for PUB / SUB over epgm?

+8
zeromq
source share
2 answers

The implementation of PGM in ZeroMQ uses a window for recovery in memory, so it is short-lived. If recovery failed due to window exhaustion: for example, publishing is faster than recovery is required for the transition, then the base PGM socket will reset and continue with the best efforts.

This means that at high data transfer rates or significant packet loss, the transport will be constantly updated, and you will delete messages that cannot be restored: therefore, reliable delivery is not guaranteed.

The PGM configuration is focused on real-time translation, so slow receivers cannot stop the sender. The protocol supports both paradigms, but the latter has not been implemented due to lack of demand.

+7
source share

ZeroMQ gives exactly one guarantee: all messages are complete - you will never receive partial messages. This does not guarantee reliability. You should check the documentation for high water behavior (HWM), which is the most common cause of dropped messages, as shown by the suicidal snail .

+4
source share

All Articles