У меня есть java приложение, получающее события из веб-сокета Discord с использованием JDA, моя цель - поставить эти события в очередь (я использую LinkedBlockingQueues, но если есть лучший инструмент для этих предложений, очень приветствую) для обработки на несколько экземпляров объектов (потребителей) асинхронно, каждый со своей собственной очередью.
Обратите внимание, что могут быть и будут очереди, которые должны работать с одним и тем же элементом, поэтому простое совместное использование очереди между потоками не будет работать.
Первым делом я попытался клонировать очередь блокировки, используя
BlockingQueue<T> original = new LinkedBlockingQueue<T>();
BlockingQueue<T> clone = new LinkedBlockingQueue<T>(original);
, но это скопировало бы только события, присутствующие в очереди в то время, а не просто ie производителя с клоном так что это не работает.
Я также пытался назначить одного слушателя каждому из потребителей, но это кажется менее эффективным, чтобы сделать это во время выполнения с jda.
Подход, который я выбрал, состоит в том, чтобы передать все события в основную очередь и запустить поток, который будет передавать все эти события в параллельные очереди, распределенные по всем экземплярам, но это просто кажется очень неэффективным и нечистым .
Каким будет лучший, самый чистый, самый эффективный способ решения этой проблемы?