我在Hazelcast群集中使用了ReplicatedMap<String, String>
。每个节点在此映射中都有其键(hazelcastInstance.getLocalEndpoint().getUuid()
)和一些数据(JSON字符串)。使用这个映射,我实现了一个服务,使每个节点都有自己的数据存储,可以访问其他节点的数据,并观察变化。
然而,我努力让分裂的大脑行为正确。
我希望在发生分裂大脑合并时entryAdded
附加到entryUpdated
的{{1}}或EntryListener
事件。然而,这种情况并非如此。我认为这是设计(?)。
您能想象解决这个问题的解决方案吗?
思路:
ReplicatedMap
可以检测到裂脑合并。问题:MembershipListener
中的数据尚未准备就绪 - 可以在调用ReplicatedMap
事件之前或之后准备好。实施memberAdded
,例如:
MergePolicy
问题:当分裂脑合并两个节点时,这可以正常工作。但是,使用四个节点(两台不同机器上的每台机器两个节点),它会消除值并且似乎随机行为。我怀疑我理解了一些错误,因为这种方法并不像希望的那样有效。因此,我还没有分析这四个节点的行为 - 分析四个日志文件也非常耗时。