Процесс ввода данных HazelcastGrid, выполняемый для каждого участника

#hazelcast #grid-computing

#hazelcast #грид-вычисления

Вопрос:

у меня проблема с hazelcast, использующим EntryProcessor или ExecutorService. Если ключ не существует ни в одном элементе, процессор все еще выполняется на каждом узле, и я не понимаю, почему?

Процессор получает ввод ключа в значение null.

ОБНОВИТЕ с помощью некоторого кода

     //example of IMap executeOnKeys
    Map<?, ?> map = getCache().executeOnKeys(keys, processor);

    //example using executor service
    Future<Object[]> result = executor.submitToKeyOwner(myCallable, key);
  

Процессор

 public class MyProcessor implements EntryProcessor<MyKey, MyValue>, Serializable {
...code
}
  

Вызываемый

 public class MyCallable implements Callable<Object[]>, Serializable {
...code
}
  

Два примера заставляют каждый узел кластера получать запросы. Если у них нет ключа, процесс запускается, и в этом проблема.

Я отправляю запрос от участника Lite, который является частью кластера.

Спасибо,

Комментарии:

1. Как вы вызываете EntryProcessor или ExecutorService? Есть пример кода? Если вы делаете то, что я предполагаю, это звучит как ошибка, но, пожалуйста, сначала поделитесь некоторым кодом.

2. Добавлен некоторый код, я думаю, теперь он лучше. Спасибо!

3. Вы отправляете этот запрос участнику lite? Все еще не уверен на 100%, что я понял. У участника lite вообще нет ключа, так как вы убедитесь, что данный ключ окажется у участника lite? То, что вы ищете, вероятно, является адресом участника: executor.submitToMember(callable, member)

4. Я отправляю данные с облегченного элемента в кластер, и на каждом процессоре я помещаю журнал, чтобы проверить, что происходит.

Ответ №1:

EntryProccessor не проверяет, существует ли ключ. Это что-то вроде хранимой процедуры, и теоретически она также может создавать новые пары ключ-значение. Тем не менее, вы можете отправить EntryProcessor на ключ, который еще не существует, и вы сможете сохранить новое, только что сгенерированное значение.

Однако вы можете проверить, есть ли значение в записи, и если нет, вы можете ожидать, что ключ еще не существует, и пропустить обработку (если это поможет) 🙂