在我的应用程序中,我们正在使用Hazelcast和一个oracle DB。
[开始过渡时,我们在Hazelcast映射中放置了包含过渡ID的条目。
如果该过渡ID在TTL中使用,则可以。我的应用程序使用了它,并且同一线程从hazelcast映射中退出了该条目,并将该过渡ID保存在数据库中。 没有问题
我的问题是在TTL中未使用该过渡ID时。 Hazelcast只是从地图上删除了该条目。
我想检索该条目并将其保存在数据库中。
您将如何解决这个问题?我正在与在至少有4个节点的群集中运行的Hazelcast一起工作。
一种解决方案是通过Mapstore Interface存储Hazelcast Map,因此即使驱逐TTL启用的数据,该数据也将保留在您的后备存储中。
另一个解决方案是捕获逐出的条目并将其存储在一些后备存储中。
这里是一个示例应用程序,您可以自己尝试。
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
IMap<String, String> map = hazelcastInstance.getMap("test");
map.addEntryListener(new EntryEvictedListener<String,String>() {
@Override
public void entryEvicted(EntryEvent<String, String> entryEvent) {
System.out.println(entryEvent.getKey() + ":" + entryEvent.getOldValue());
}
},true);
map.put( "1", "John", 10, TimeUnit.SECONDS );
[10秒钟后,您将看到该条目已被逐出并打印到控制台。
事件被发送到所有节点,因此更好地实现EntryListenerConfig,将其添加到MapConfig并将local参数设置为true以仅接收本地事件会更好。
请参阅Registering Map Listeners了解更多信息。