В чем разница между очередью задач и очередью сообщений в RabbitMQ?
Мы используем RabbitMQ в качестве очереди сообщений и Celery для очередей задач, и я пытаюсь обернуть головы вокруг очередей.
Может ли кто-нибудь объяснить мне оперативные различия между очередью задач и очередью сообщений?
До сих пор я получаю, что очередь сообщений будет использоваться для фактических данных, таких как текстовое сообщение или фрагмент журнала. Он помещается в очередь сообщений, чтобы работник мог собирать его и что-то с ним делать, будь то анализ, хранение и т. Д.
Часть очереди задач смущает меня, не уверен, почему, когда или что это будет делать?
Я бы подумал, что рабочие (задачи AKA?) Будут постоянно опрашивать очередь сообщений о том, что нужно делать, так почему же существует очередь задач?
1 ответ
Не совсем, но близко. Очередь задач в RabbitMQ больше похожа на планировщик задач, например cron или Windows Task Scheduler.
Основная идея рабочих очередей (или очередей задач) состоит в том, чтобы избежать немедленного выполнения ресурсоемкой задачи и ждать ее завершения. Вместо этого мы планируем задачу, которая будет сделана позже. Мы инкапсулируем задачу как сообщение и отправляем ее в очередь. Рабочий процесс, работающий в фоновом режиме, выскочит задачи и в итоге выполнит задание. Когда вы запускаете много рабочих, задачи будут распределены между ними.
RabbitMQ - брокер сообщений, отсюда и терминология. Так что функционально, функционально, на самом деле нет особой разницы. Один для сообщений, другой для задач / заданий. Единственное реальное отличие состоит в том, что сообщения, как правило, предназначены для обработки (и, следовательно, удаления из очереди) как можно быстрее, тогда как задачи обычно планируются на определенное время и, следовательно, остаются в очереди на некоторое время. Это, вероятно, не та разница, о которой вам придется беспокоиться слишком сильно в контексте системного администрирования.