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 = false
,isTerminal = false
.
我正在尝试了解什么被认为是处理这种情况并从中恢复的好策略。
例如,再次尝试订阅此主题是否是一个好习惯?
发送一条消息以清除集群中其他节点的数据是一种好习惯吗?他们甚至会在环形缓冲区不同步后收到消息吗?
谢谢
消息 Reason: Underlying ring buffer data related to the reliable topic is lost
表示您尝试读取的数据不再可用,因为它已被底层 Ringbuffer 中的更新数据覆盖 - 您的生产者可能比消费者更快。
当出现这种情况时,ReliableTopic 仍然可用,您可以注册一个新的侦听器。
为防止这种情况发生,您可以增加底层环形缓冲区的大小(提供与可靠主题同名的环形缓冲区配置)或配置 TopicOverloadPolicy
。有关详细信息,请参阅 documentation。
我们有一个 ReliableMessageListener
通过 onMessage
实现来同步它在整个集群中持有的一些数据结构。
集群由三个节点组成。我们注意到其中一个主题不同步,并且由于消息丢失而被终止,由环形缓冲区检测到,因为我们收到“Terminating MessageListener, ... Reason: Underlying ring buffer data related to reliable topic is lost
”异常。发生的情况是该节点仍在运行,但该特定侦听器未从其他两个节点获取 events/messages,而它们确实从中获取。
我们对这个特定主题进行了事实上的裂脑。
我们的消息监听器配置为isLossTolerant = false
,isTerminal = false
.
我正在尝试了解什么被认为是处理这种情况并从中恢复的好策略。
例如,再次尝试订阅此主题是否是一个好习惯? 发送一条消息以清除集群中其他节点的数据是一种好习惯吗?他们甚至会在环形缓冲区不同步后收到消息吗?
谢谢
消息 Reason: Underlying ring buffer data related to the reliable topic is lost
表示您尝试读取的数据不再可用,因为它已被底层 Ringbuffer 中的更新数据覆盖 - 您的生产者可能比消费者更快。
当出现这种情况时,ReliableTopic 仍然可用,您可以注册一个新的侦听器。
为防止这种情况发生,您可以增加底层环形缓冲区的大小(提供与可靠主题同名的环形缓冲区配置)或配置 TopicOverloadPolicy
。有关详细信息,请参阅 documentation。