HazelCast多重投放操作不一致

时间:2018-07-02 16:55:17

标签: hazelcast

我正在使用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。

谁能解释为什么榛子广播的效果不一致?我该如何解决这种情况?

1 个答案:

答案 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已经有AtomicIntegerPN-Counter的距离。可以在此处手动执行操作的对象。