Hazelcast,由于消息丢失而终止后恢复 MessageListener 成员

Hazelcast, recovering a MessageListener member after termination due to message loss

我们有一个 ReliableMessageListener 通过 onMessage 实现来同步它在整个集群中持有的一些数据结构。

集群由三个节点组成。我们注意到其中一个主题不同步,并且由于消息丢失而被终止,由环形缓冲区检测到,因为我们收到“Terminating MessageListener, ... Reason: Underlying ring buffer data related to reliable topic is lost”异常。发生的情况是该节点仍在运行,但该特定侦听器未从其他两个节点获取 events/messages,而它们确实从中获取。

我们对这个特定主题进行了事实上的裂脑。

我们的消息监听器配置为isLossTolerant = falseisTerminal = false.

我正在尝试了解什么被认为是处理这种情况并从中恢复的好策略。

例如,再次尝试订阅此主题是否是一个好习惯? 发送一条消息以清除集群中其他节点的数据是一种好习惯吗?他们甚至会在环形缓冲区不同步后收到消息吗?

谢谢

消息 Reason: Underlying ring buffer data related to the reliable topic is lost 表示您尝试读取的数据不再可用,因为它已被底层 Ringbuffer 中的更新数据覆盖 - 您的生产者可能比消费者更快。

当出现这种情况时,ReliableTopic 仍然可用,您可以注册一个新的侦听器。

为防止这种情况发生,您可以增加底层环形缓冲区的大小(提供与可靠主题同名的环形缓冲区配置)或配置 TopicOverloadPolicy。有关详细信息,请参阅 documentation