在每个成员上执行的 HazelcastGrid Computing EntryProcessor
HazelcastGrid Computing EntryProcessor Executed on every Member
我对使用 EntryProcessor 或 ExecutorService 的 hazelcast 有疑问。如果密钥在任何成员中都不存在,处理器仍会在每个节点中执行,我不明白为什么?
处理器接收到空键输入。
更新一些代码
//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 成员发送请求。
谢谢,
EntryProccessor 不检查密钥是否存在。它有点像存储过程,理论上也可以创建新的键值对。也就是说,您可以将一个 EntryProcessor 发送到一个尚不存在的键,您将能够存储一个新的、刚刚生成的值。
但是,您可以检查条目中是否有值,如果没有,您可以预期密钥尚不存在并跳过处理(如果有帮助):-)
我对使用 EntryProcessor 或 ExecutorService 的 hazelcast 有疑问。如果密钥在任何成员中都不存在,处理器仍会在每个节点中执行,我不明白为什么?
处理器接收到空键输入。
更新一些代码
//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 成员发送请求。
谢谢,
EntryProccessor 不检查密钥是否存在。它有点像存储过程,理论上也可以创建新的键值对。也就是说,您可以将一个 EntryProcessor 发送到一个尚不存在的键,您将能够存储一个新的、刚刚生成的值。
但是,您可以检查条目中是否有值,如果没有,您可以预期密钥尚不存在并跳过处理(如果有帮助):-)