我使用EntryProcessor或ExecutorService进行hazelcast问题。如果密钥不存在于任何成员中,则处理器仍然在每个节点中执行,我不明白为什么?
处理器接收密钥条目为null。
更新一些代码
//example of IMap executeOnKeys
Map<?, ?> map = getCache().executeOnKeys(keys, processor);
//example using executor service
Future<Object[]> result = executor.submitToKeyOwner(myCallable, key);
处理器
public class MyProcessor implements EntryProcessor<MyKey, MyValue>, Serializable {
...code
}
可赎回
public class MyCallable implements Callable<Object[]>, Serializable {
...code
}
两个示例使群集的每个节点都接收请求。如果他们没有钥匙,则会触发流程并解决问题。
我从作为群集一部分的Lite成员发送请求。
谢谢,
答案 0 :(得分:1)
EntryProccessor不会检查密钥是否存在。它类似于存储过程,理论上也可以创建新的键值对。也就是说,您可以将EntryProcessor发送到尚未存在的密钥,并且您将能够存储刚刚生成的新值。
但是,您可以检查条目中是否有值,如果没有,您可以预期密钥尚不存在并跳过处理(如果有帮助): - )