2010-03-18 3 views
2

У меня есть рабочий процесс, который я хочу, чтобы выглядеть примерно так:Как держать очередь сообщений и иметь группу рабочих потоков без опроса?

 
             /Worker 1 \ 
=Request Channel= -> [Holding Queue|||] -> Worker 2 -> =Response Channel= 
             \ Worker 3/

То есть:

  • просит прийти и они входят в очередь FIFO
  • Одинаковые рабочие затем подобрать задачи из очередь
  • В любой момент времени любой рабочий может работать только с одной задачей
  • Когда рабочий свободен, а очередь ожидания не пуста, рабочий шо ÜLD сразу подобрать другую задачу
  • Когда задачи выполнены, рабочий помещает результат на Response Channel

Я знаю, что есть QueueChannel s в Спринг интеграции, но эти каналы требуют опроса (который, кажется неоптимальным). В частности, если рабочий может быть занят, я бы хотел, чтобы рабочий был занят.

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

Как я могу реализовать это распределение очередей очередей сообщений/работы, избегая опроса?

Редактировать: Кажется, я ищу Message Dispatcher pattern - как это реализовать, используя интеграцию Spring/Spring?

ответ

3

В Spring Integration 2.0.0 мы добавили подэлемент <dispatcher/> к элементу <channel/>. Вы можете использовать это для обеспечения асинхронной передачи вручную без использования опроса.

Здесь используется java.util.concurrent внизу.

<channel id="shareableWork"> 
    <dispatcher task-executor="pool"/> 
</channel> 
<thread-pool-task-executor id="pool" max-size="3"/> 
2

Возможно, вам стоит посмотреть классы ExecutorService из пакета параллелизма.

+0

и если вы заинтересованы в потоках обработки «работу», чтобы быть в кэше, вы можете использовать 'Executors.newCachedThreadPool()', хотя это больше деталей реализации/настройки. –

Смежные вопросы