我正在使用hazelcast(v2.1.3) - 在地图的storeload中,“store”不断被调用而不是“store all”(即使写入延迟秒标志大于0):
<map-store enabled="true">
<class-name>test.test.abcMap</class-name>
<write-delay-seconds>5</write-delay-seconds>
</map-store>
任何有用的建议都可以帮助解决这个问题。我让asynch在一个不同的项目上工作,但似乎无法让他们现在正常工作。感谢
修改 在write-delay-seconds指定的延迟之后,将调用存储实现(而不是存储all)。
答案 0 :(得分:2)
您确定您需要存储多个条目吗?
如果地图中只添加或更新了一个条目,即使您启用了后写,也会调用MapStore.store(key, value)
。只有在需要存储多个条目时才会调用MapStore.storeAll(map)
。
以下是来自com.hazelcast.impl.CMap.runStoreUpdate()
的相关代码(成员store
的类型为MapStore
):
if (updates.size() == 1) {
Map.Entry entry = updates.entrySet().iterator().next();
store.store(entry.getKey(), entry.getValue());
} else if (updates.size() > 1) {
store.storeAll(updates);
}
同样适用于MapStore.delete()
和MapStore.deleteAll()
。
您可以在Github的Hazelcast source
中查看此代码