2016-10-19 10 views
0

У меня проблема с каретой с использованием EntryProcessor или ExecutorService. Если ключ не существует в каком-либо члене, процессор все еще выполняется в каждом узле, и я не понимаю, почему?HazelcastGrid Computing EntryProcessor Выполнено на всех членах

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

UPDATE с некоторым кодом

//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 
} 

Callable

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

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

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

Спасибо,

+0

Как вы называете EntryProcessor или ExecutorService? Любой пример кода? Если вы делаете то, что, я думаю, звучит как ошибка, но сначала передайте код. – noctarius

+0

Добавлен код, я думаю, теперь это лучше. Благодаря! – Patrick

+0

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

ответ

1

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

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