Могу ли я использовать igniteQueue в другой функции cache.invoke ()? - PullRequest
0 голосов
/ 02 июля 2018

Могу ли я использовать igniteQueue в другой функции cache.invoke ()?

В точной функции Ignite Service A:

cacheA.invoke(record){ // do process to record

igniteQueue.put(processed_record);

}

В точной функции Ignite Service B:

saved_processed_record = igniteQueue.take();

Он работает плавно, когда TPS низкий, но когда я работаю с высоким TPS, иногда в журнале появляется сообщение «Возможное голодание в полосатом пуле»,

Смотрите мой предыдущий пост: Служба Ignite зависает при удалении кэша вызовов в процессоре вызова другого кэша «Возможное голодание в чередующемся пуле»?

Похоже, что я использую igniteQueue в cache.invoke также не правильно по сравнению с использованием ignite cache в cache.invoke?

Так что, если я не могу использовать очередь зажигания в cache.invoke (), есть ли лучший способ сделать это? Я пытаюсь использовать другую очередь сообщений (kafka или redis) вместо воспламенения очереди в кэше, но мы знаем, что Ignite говорит, что это также очередь сообщений, использование kafka в invite ignite кажется очень странным, как я могу использовать чистый ignite для достижения этой цели?

1 Ответ

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

Вы не должны выполнять какие-либо операции блокировки из метода "invoke (..)", так как он выполняется в пределах блокировки ключа. Вместо этого, почему бы не создать еще один пул потоков и поручить ему добавлять и извлекать объекты из IgniteQueue. Затем вы можете просто отправить задачу в этот пул потоков из метода "invoke (..)" и внутри этой задачи поставить объект в очередь.

...