我正在使用Hazelcast 3.3。
一个成员将条目写入IMap并调用map.executeOnEntries(myEntryProcessor)
。 EntryProcessor的任务是只打印控制台上的条目。但是,成员(其他3个和第1个= 4个成员)似乎打印重叠的条目集。
我的理解是EntryProcessors只获得与localKeySet()
对应的条目。但是,似乎并非如此。
有人可以解释一下这种行为吗?
答案 0 :(得分:1)
你的推理是正确的。 EntryProcessor只应该触摸本地密钥。
你用什么作为钥匙? Hazelcast使用密钥的序列化版本作为实际密钥;所以也许你有2个不同的键实例导致相同的'toString',但它们的二进制内容是不同的。
我用自己的脚射击自己HashMap是密钥的一部分;这可能导致不同的二进制内容,即使实际内容相同,然后你会得到奇怪的行为。
如果您正在使用例如长或字符串为关键;那时我无法解释你所看到的行为。复制这个有多难?
答案 1 :(得分:0)
发现了这个问题。问题不在于EntryProcessors。实际上,将数据写入分布式IMap的代码运行的数量超过了所需数量的成员。
因此,实质上,一个进程(通过IExecutorService启动)在多个实例上运行并发布“重叠集”/重复数据集。 EntryProcessor正在以正确的方式工作。