0

我对使用 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 成员发送请求。

谢谢,

4

1 回答 1

1

EntryProcessor 不检查密钥是否存在。它类似于存储过程,理论上也可以创建新的键值对。也就是说,您可以将一个 EntryProcessor 发送到一个尚不存在的键,并且您将能够存储一个新的、刚刚生成的值。

但是,您可以检查条目中是否有值,如果没有,您可以预期密钥尚不存在并跳过处理(如果有帮助):-)

于 2016-12-21T08:39:01.310 回答