我有多个节点参与Hazelcast群集。一个节点从外部系统接收事件并将对象放入IMap。我有其他节点需要地图中的所有条目以及任何新的条目。 (例如,这些辅助节点的一个用例是向用户呈现数据的实时视图。)
其中一种方法是:
map.addEntryListener(new MyListener());
for (Object value : map.values()) {
...
}
但是,我可能会看到同一个对象两次,如果在调用我的侦听器后添加了该对象,但在我的for循环之前添加了该对象。 (这不是理想的,但我可以使它工作)。我也可以在for循环之后放入addEntryListener(),然后我可能会错过条目。
理想情况下,我想要一个addEntryListenerWithReplay()方法。我在启动HazelcastInstance之前尝试设置EntryListenerConfig,认为提供了“添加侦听器重放”语义,但我的测试建议不然。
我能想到的唯一其他解决方案是使用分布式锁定,以确保我不会错过任何插入地图的项目。
非常感谢您的建议和见解,非常感谢Hazelcast团队。