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