Инструменты пользователя

Инструменты сайта


o:outbox

Outbox

Outbox (исходящие сообщения) – паттерн в архитектуре приложения, который предусматривает создание специальной таблички в базе данных (обычно OUTBOX), в которую складываются сообщения, которые нужно отправить через брокера сообщений. Предполагается, что будет запускаться периодическая работа, которая будет вычитывать ещё неотправленные сообщения из этой таблицы и пытаться их отправить. В принципе также предполагается, что 99,99% сообщений будут надлежащим образом отправлены и доставлены с первого раза, но, если что-то где-то пойдёт не так, то при следующем запуске периодической работы, будет предпринята ещё одна попытка отправки сообщения, что в свою очередь должно гарантировать, что сообщение никогда не будет потеряно.

Ещё немного деталей

Поводом для отправки сообщения может быть, например, факт сохранение в базу данных какой-то сущности. Например, в микросервис прилетел новый заказ и мы сохраняем данные заказа в таблицу ORDERS. Если по этому поводу нам нужно сделать оповещение других сервисов через Кафку, то может случиться так (и иногда будет случаться), что строчку в ORDERS мы сохранили, но сообщение должным образом по тем или иным причинам с первого раза не отправили. И это может быть очень неприятной ситуацией.

Механизм фиксации транзакций (коммиты) БД вместе с паттерном outbox – один из способов решения этой проблемы. Мы делаем записи в таблицы ORDERS и OUTBOX в рамках одной транзакции, коммитим изменения. Затем периодическая процедура пытается отправить необходимые сообщения столько раз, сколько понадобится, чтобы всё отработало должны образом.


Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki