Мультикастинг HazelCast работает противоречиво - PullRequest
0 голосов
/ 02 июля 2018

Я использую hazelCast для сохранения только целочисленного значения в 2 разных приложениях Java. У меня есть 2 Java-приложения, которые работают на разных серверах. Соединение HazelCast установлено успешно. Когда я пытаюсь увеличить значение с помощью следующей команды.

DistributedCounter counter = Hazelcast.getHazelcastInstanceByName("myinstance").getDistributedObject("myservice", "value");
counter.inc();

Я пытаюсь получить значение и увидеть значение = 10 после завершения операции увеличения на 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.

Кто-нибудь может объяснить, почему Hazelcast работает непоследовательно? И как я могу справиться с этой ситуацией?

1 Ответ

0 голосов
/ 02 июля 2018

@ ЛадноАталай, я вижу, что вы создали свой собственный сервис. Если вы посмотрите на пример в Hazelcast Doc, http://docs.hazelcast.org/docs/3.10.2/manual/html-single/index.html#implementing-counterproxy,, вы увидите, что операция inc ожидает завершения операции, вызывая future.get(). Даже если вы просто возвращаете истину / ложь, вы все равно должны дождаться завершения операции перед отправкой другой операции.

PS: Hazelcast уже имеет AtomicInteger & PN-Counter dist. объекты, которые делают то, что вы делаете здесь вручную.

...