将可调用对象发送到将保存未来数据的 hazelcast 节点
Send a callable to the hazelcast node which will hold future data
我有一个由两个 hazelcast 实例组成的集群。当我使用执行程序服务并将任务发送给密钥所有者时,密钥是新的(意味着现在没有地图包含此密钥,但在 "call" 之后),然后我的可调用对象将分发到每个节点。
instance.getExecutorService("default")
.submitToKeyOwner(callable, newTargetColumn);
出于调试目的,我实现了一个只记录事件的 EntryListener。在那里你可以看到两个实例都在做完全相同的事情。
hz._hzInstance_2_dev.cached.thread-3 TRACE datastore.WorkmapDebugListener - entry added: EntryEvent {worker-map::to be defined} key=high, oldValue=null, value=[1.04, 1.01, 0.98, 0.9, 0.86, 0.83, 0.83, 0.85, 0.92, 0.91, 0.47, 0.49, 0.48, 0.49, 0.48, 0.42, 0.52, 0.56, 0.55, 0.52, 0.53, 0.51, 0.47, 0.49, 0.4, 0.41, 0.39, 0.37, 0.38, 0.37, 0.41, 0.36, 0.38, 0.33, 0.3, 0.31, 0.32], event=ADDED, by Member [192.168.1.157]:5802 this
hz._hzInstance_1_dev.cached.thread-3 TRACE datastore.WorkmapDebugListener - entry added: EntryEvent {worker-map::to be defined} key=high, oldValue=null, value=[1.04, 1.01, 0.98, 0.9, 0.86, 0.83, 0.83, 0.85, 0.92, 0.91, 0.47, 0.49, 0.48, 0.49, 0.48, 0.42, 0.52, 0.56, 0.55, 0.52, 0.53, 0.51, 0.47, 0.49, 0.4, 0.41, 0.39, 0.37, 0.38, 0.37, 0.41, 0.36, 0.38, 0.33, 0.3, 0.31, 0.32], event=ADDED, by Member [192.168.1.157]:5802
难道不能提前拿到节点吗?我的意思是因为无论如何都会根据映射键计算分区?
我可以向可能保存数据的节点发送一个可调用对象吗?
'submitToKeyOwner' 表示我们计算该键的哈希值,并根据该哈希值找到正确的成员。成员是否真的拥有该密钥并不重要。检查密钥是否存在也没有意义,因为我们应该检查哪个地图?也许一张地图有钥匙而另一张地图没有。因此,不依赖于密钥的存在和用于将该任务发送给成员的路由机制。
这里错误的解释是日志记录(我也被误会了)。如果你在 member-a 上的某个映射中插入一个键,并且 member-a 和 member-b 在该映射上有一个条目监听器注册,他们都会收到一个事件,表明一个条目被添加到 member-a 上;连member-b.
如果您有任何问题,请随时向他们提问。您的代码应该可以正常工作。
我有一个由两个 hazelcast 实例组成的集群。当我使用执行程序服务并将任务发送给密钥所有者时,密钥是新的(意味着现在没有地图包含此密钥,但在 "call" 之后),然后我的可调用对象将分发到每个节点。
instance.getExecutorService("default")
.submitToKeyOwner(callable, newTargetColumn);
出于调试目的,我实现了一个只记录事件的 EntryListener。在那里你可以看到两个实例都在做完全相同的事情。
hz._hzInstance_2_dev.cached.thread-3 TRACE datastore.WorkmapDebugListener - entry added: EntryEvent {worker-map::to be defined} key=high, oldValue=null, value=[1.04, 1.01, 0.98, 0.9, 0.86, 0.83, 0.83, 0.85, 0.92, 0.91, 0.47, 0.49, 0.48, 0.49, 0.48, 0.42, 0.52, 0.56, 0.55, 0.52, 0.53, 0.51, 0.47, 0.49, 0.4, 0.41, 0.39, 0.37, 0.38, 0.37, 0.41, 0.36, 0.38, 0.33, 0.3, 0.31, 0.32], event=ADDED, by Member [192.168.1.157]:5802 this
hz._hzInstance_1_dev.cached.thread-3 TRACE datastore.WorkmapDebugListener - entry added: EntryEvent {worker-map::to be defined} key=high, oldValue=null, value=[1.04, 1.01, 0.98, 0.9, 0.86, 0.83, 0.83, 0.85, 0.92, 0.91, 0.47, 0.49, 0.48, 0.49, 0.48, 0.42, 0.52, 0.56, 0.55, 0.52, 0.53, 0.51, 0.47, 0.49, 0.4, 0.41, 0.39, 0.37, 0.38, 0.37, 0.41, 0.36, 0.38, 0.33, 0.3, 0.31, 0.32], event=ADDED, by Member [192.168.1.157]:5802
难道不能提前拿到节点吗?我的意思是因为无论如何都会根据映射键计算分区?
我可以向可能保存数据的节点发送一个可调用对象吗?
'submitToKeyOwner' 表示我们计算该键的哈希值,并根据该哈希值找到正确的成员。成员是否真的拥有该密钥并不重要。检查密钥是否存在也没有意义,因为我们应该检查哪个地图?也许一张地图有钥匙而另一张地图没有。因此,不依赖于密钥的存在和用于将该任务发送给成员的路由机制。
这里错误的解释是日志记录(我也被误会了)。如果你在 member-a 上的某个映射中插入一个键,并且 member-a 和 member-b 在该映射上有一个条目监听器注册,他们都会收到一个事件,表明一个条目被添加到 member-a 上;连member-b.
如果您有任何问题,请随时向他们提问。您的代码应该可以正常工作。