我有两个hazelcast实例的集群。当我使用执行程序服务并将任务发送给密钥是新的密钥所有者时(意味着现在没有地图包含此密钥,但是在"呼叫"之后),然后我的密码可以分配到每个节点。
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
是不是可以预先获得Node?我的意思是,因为分区将在地图密钥上计算?
我可以向可能保存数据的节点发送一个callable吗?
答案 0 :(得分:1)
' submitToKeyOwner'意味着我们计算该密钥的哈希并根据该哈希找到正确的成员。如果会员实际拥有该密钥并不重要。检查密钥存在也没有意义,因为我们应该检查哪个地图?也许一张地图有钥匙而另一张地图没有。因此,不依赖于密钥的存在以及用于将该任务发送给成员的路由机制。
这里的错误解释是伐木的错误(我也被放错了脚)。如果在member-a上的某个映射中插入一个键,并且member-a和member-b在该映射上有一个entry-listener寄存器,那么它们中的两个将获得一个在member-a上添加了一个条目的事件;成员-b。
如果您有任何疑问,请随时向他们提问。您的代码应该可以正常工作。