Как получить данные из многопоточности в Java с помощью Custom Event Listener? - PullRequest
0 голосов
/ 01 января 2019

У меня есть около 500 потоков (предположим, что они называются X для всех этих потоков), и эти потоки непрерывно получают данные от различных служб restful.Кроме того, у меня есть 20 потоков (предположим, что все эти потоки называются Y) для получения данных, возвращаемых из других потоков (из X).

Должен ли я использовать BlockingQueue или Custom Event Listener?Какой из них лучше?

Также не должно быть потери данных.

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Почему бы вам не попробовать очередь сообщений (например, Kafka, rabbitmq) , которая работает как держатель данных между потоками x и Y. Вы помещаете данные в очередь из x и извлекаете / обрабатываете данныечерез Y, что асинхронно .

. Вы должны выбрать это, как даже в Event Listener, если мы рассмотрим число x 500 и y 20. Тогда даже для каждого вызова x будет 20 вызовов.(предположим). который может стать бутылочным горлышком при большой нагрузке.

0 голосов
/ 02 января 2019

BlockingQueue лучше (обычно).

0 голосов
/ 01 января 2019

Ограничение на использование BlockingQueue , у него есть очередь с пороговой точкой.Опубликовать этот пункт, больше не могут обрабатываться темы.В сценарии потерянные данные не могут быть восстановлены, когда исключения (сбои) генерируются группой потоков (X или Y) (которые не могут быть обработаны снова).

Однако, Пользовательское событиеПрослушиватель является предпочтительным подходом, когда подтверждение может быть сделано для всех потоков, а в случае исключения потока (сбоя) мы можем извлечь потерянные данные, используя некоторый механизм повторной обработки.

Может использовать ReactiveX ( Наблюдаемая ) библиотека для этой проблемы.

...