У меня есть рабочий процесс, который я хочу выглядеть примерно так:
/ Worker 1 \
=Request Channel= -> [Holding Queue|||] -> Worker 2 -> =Response Channel=
\ Worker 3 /
То есть:
- Приходят запросы, и они входят в очередь FIFO
- Идентичные рабочие затем выбирают задачи из очереди
- В любой момент времени любой работник может выполнить только одно задание
- Когда работник свободен, а очередь хранения не пуста, работник должен немедленно приступить к другой задаче
- Когда задачи завершены, работник помещает результат в
Response Channel
Я знаю, что в Spring Integration есть QueueChannel
, но эти каналы требуют опроса (что кажется неоптимальным). В частности, если работник может быть занят, я бы хотел, чтобы работник был занят.
Кроме того, я рассмотрел возможность вообще избегать очереди и просто разрешать круговые задания всем работникам, но предпочтительно иметь одну очередь ожидания, поскольку некоторые задачи могут выполняться быстрее, чем другие. Кроме того, я хотел бы узнать, сколько осталось рабочих мест (которые я могу получить из очереди) и возможность отмены всех или отдельных заданий.
Как я могу реализовать этот шаблон очереди сообщений / распределения работы, избегая опроса?
Редактировать: Похоже, я ищу шаблон диспетчера сообщений - как я могу реализовать это с помощью интеграции Spring / Spring?