У меня есть рабочий процесс, который я хочу, чтобы выглядеть примерно так:Как держать очередь сообщений и иметь группу рабочих потоков без опроса?
/Worker 1 \ =Request Channel= -> [Holding Queue|||] -> Worker 2 -> =Response Channel= \ Worker 3/
То есть:
- просит прийти и они входят в очередь FIFO
- Одинаковые рабочие затем подобрать задачи из очередь
- В любой момент времени любой рабочий может работать только с одной задачей
- Когда рабочий свободен, а очередь ожидания не пуста, рабочий шо ÜLD сразу подобрать другую задачу
- Когда задачи выполнены, рабочий помещает результат на
Response Channel
Я знаю, что есть QueueChannel
s в Спринг интеграции, но эти каналы требуют опроса (который, кажется неоптимальным). В частности, если рабочий может быть занят, я бы хотел, чтобы рабочий был занят.
Кроме того, я рассмотрел возможность избежать очереди в целом и просто позволить задачам крутить всех работников, но предпочтительно иметь одну линию ожидания, так как некоторые задачи могут выполняться быстрее других. Кроме того, мне хотелось бы узнать, сколько осталось заданий (которые я могу получить из очереди) и возможность отменить все или определенные задания.
Как я могу реализовать это распределение очередей очередей сообщений/работы, избегая опроса?
Редактировать: Кажется, я ищу Message Dispatcher pattern - как это реализовать, используя интеграцию Spring/Spring?
и если вы заинтересованы в потоках обработки «работу», чтобы быть в кэше, вы можете использовать 'Executors.newCachedThreadPool()', хотя это больше деталей реализации/настройки. –