Как работает брокер сообщений
Что проверяют
Понимаете ли вы роль посредника и знаете ли гарантии доставки.
Как отвечать
Брокер это посредник между отправителем и получателем. Отправитель не знает, кто и когда обработает сообщение, а получатель не знает, кто его прислал. Именно эта развязка и есть смысл конструкции.
Как проходит сообщение: отправитель публикует его брокеру, брокер сохраняет и кладёт в нужное место, получатель забирает и подтверждает обработку.
Две базовые модели:
- очередь: сообщение достаётся одному из получателей. Так распределяют работу между несколькими экземплярами обработчика;
- публикация и подписка: копия каждому подписчику. Так рассылают события, о которых должны узнать несколько систем.
Что даёт брокер:
- развязку по времени: получатель может быть недоступен, сообщение подождёт;
- сглаживание пиков: всплеск нагрузки превращается в очередь, а не в отказ;
- надёжность: сохранённое сообщение переживёт перезапуск;
- масштабирование: добавили обработчиков, разбор пошёл быстрее.
Гарантии доставки называть обязательно. Практически везде это не менее одного раза: при сбое подтверждения сообщение будет доставлено повторно. Отсюда главное требование: обработчик обязан быть идемпотентным, обычно через ключ операции и проверку уже обработанного. Доставка ровно один раз возможна лишь в узких рамках и обычно означает связку транзакционной записи с дедупликацией.
Что настраивают: подтверждение после обработки, а не до; ограничение числа неподтверждённых сообщений на получателя; очередь неразобранного для того, что не удалось обработать; повторы с задержкой.
Отдельно стоит различать два семейства: классический брокер удаляет сообщение после подтверждения, а журнал событий хранит его до истечения срока и позволяет нескольким независимым группам читать одно и то же с перечитыванием истории.
Где спотыкаются
Подтверждают сообщение до обработки.
Не делают обработчик идемпотентным.
Обещают доставку ровно один раз.
Не заводят очередь неразобранного и зацикливают повторы.