#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 на ключ, который еще не существует, и вы сможете сохранить новое, только что сгенерированное значение.
Однако вы можете проверить, есть ли значение в записи, и если нет, вы можете ожидать, что ключ еще не существует, и пропустить обработку (если это поможет) 🙂