Как узнать последнюю работу в очереди - PullRequest
0 голосов
/ 29 мая 2018

У меня есть группа заданий, которые нужно обработать.Некоторые могут занять 10 минут, некоторые могут занять 1 час.

Теперь мне нужно знать, какое последнее задание было выполнено, потому что в конце этой группы заданий мне нужно запустить другое сообщение.

В этом случае очередь сообщений - RabbitMQ.

Есть ли способ, которым я могу выполнить это только с помощью RabbitMQ?

Какая стратегия будет хорошей для этой задачи?

1 Ответ

0 голосов
/ 30 мая 2018

Эту стратегию вы можете использовать с любой системой обмена сообщениями.

Я предполагаю, что у вас есть группа работников, которые слушают одну очередь с заданиями, которые нужно обработать.Теперь у вас может быть служба, позволяющая называть ее «Менеджер», которая дублирует эту очередь и сохраняет все не законченные сообщения.Теперь, когда работник заканчивает работу, он отправляет сообщение-подтверждение менеджеру.Диспетчер, например, отбрасывает все выполненные задания и сохраняет только один запуск(Если вы хотите принять во внимание допустимые сбои, это тоже можно отследить).Когда у менеджера больше нет сообщений, он публикует сообщение «все сообщения в группе готовых тем».Теперь издатели могут прослушивать эту тему и отправлять новые сообщения о вакансиях в «очередь заданий».

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

Пример реализации RabbitMQ.

Теперь, чтобы реализовать это в RabbitMQ, вы можете, например, создать один FanoutExchange (для производителя для отправки сообщений) и две очереди jobsQueue (для отправки рабочих мест) иjobTrackingQueue (для отправки заданий в менеджер для отслеживания заданий).Теперь вы создаете второй FonoutExchange (для диспетчера, чтобы отправлять сообщения о выполненных задачах), вы создаете неназванную очередь для каждого производителя, который хочет знать, все ли сообщения выполнены.

...