我正在使用hazelCast在2个不同的Java应用程序上仅保存一个整数值。我有2个运行不同服务器的Java应用程序。 HazelCast连接已成功建立。当我尝试使用以下命令增加值时。
DistributedCounter counter = Hazelcast.getHazelcastInstanceByName("myinstance").getDistributedObject("myservice", "value");
counter.inc();
我正在尝试获取值,并在完成10次增量操作后看到value = 10。但有时我看到的值是8或9。有时它会起作用。 inc方法是:
NodeEngine nodeEngine = getNodeEngine();
IncOperation operation = new IncOperation("value", 1);
int partitionId = nodeEngine.getPartitionService().getPartitionId("value");
InvocationBuilder builder = nodeEngine.getOperationService().createInvocationBuilder("myservice", operation, partitionId);
try {
final Future<Integer> future = builder.invoke();
return true;
}
catch (Exception e) {
throw ExceptionUtil.rethrow(e);
}
HazelCast网络配置设置为多播。我禁用了tcp / ip。
谁能解释为什么榛子广播的效果不一致?我该如何解决这种情况?
答案 0 :(得分:2)
@OkayAtalay,我看到您创建了自己的服务。如果查看Hazelcast Doc http://docs.hazelcast.org/docs/3.10.2/manual/html-single/index.html#implementing-counterproxy上的示例,您会看到inc
操作通过调用future.get()
等待操作完成。即使您只是返回true / false,您仍然必须等待操作完成才能发送其他操作。
PS:Hazelcast已经有AtomicInteger
和PN-Counter
的距离。可以在此处手动执行操作的对象。