Во-первых, очереди часто поддерживаются реальными таблицами БД и могут поддерживать устойчивость сообщений. Кроме того, очередь является естественным способом отодвинуть работу, которая должна выполняться асинхронно, что, если вы разрабатываете этот принципал с самого начала, очень мощно.
Кроме того факта, что таблица (сущность) имеет набор жестких столбцов (атрибутов), и эта таблица состоит из набора составляемых записей, а также очереди, это не что иное, как списки материалов, которые вы используете. queue-as-a-table как формальная очередь, просто при регулярном (cron) опросе.
В MQ добавлена еще одна изящная функция, хотя обычно для синхронизации доступа к самому сообщению (вы можете или не можете делать это в своем SQL, чтобы получить следующую вещь).
Мне нравится рассматривать механизм cron / table как основанный на POLL, а MQ - как основанный на EVENT.
Преимущество очереди, по моему мнению, заключается в том, что она заботится о синхронизации, обновлении статуса. MQ можно настроить на «трансляцию» (тему) или сделать сообщение доступным для группы потребителей или слушателей.
MQ, хотя асинхронный, скорее всего, будет работать между вашим окном cron. Откуда вы знаете, что количество сообщений, которые вы обрабатываете в своей таблице, может быть выполнено до того, как будет выполнено следующее задание cron и попытается выполнить предыдущее задание?
Несколько потребителей для MQ позволяют вам масштабировать работу по своему усмотрению. В приведенном выше примере, если вы увидели, что ваш load average
(точно такой же в очереди процессов ОС) больше, чем вам нравится, вы можете выделить другого потребителя для обработки указанной нагрузки, включая и отключая его по мере необходимости.
MQ могут быть настроены на разные рабочие параметры, такие как приоритет сообщений и производительность (некоторые очереди могут оставаться в памяти, другие сохраняются на диске).
Недостаток - это то, что (как уже упоминалось) иногда затрудняет запрос к очереди и для которой можно получить метрики. Я всегда нахожу системы MQ с резервным хранилищем БД, так что я могу сам наблюдать за очередью с помощью SQL.