Преимущества применения Transactional Outbox в распределённых системах:
- Обеспечение надёжной доставки сообщений. 2 Сообщения сохраняются в хранилище данных перед отправкой в брокер, что гарантирует, что данные не будут потеряны. 2
- Устойчивость к временным отказам брокера сообщений. 5 Если брокер недоступен, события остаются в таблице outbox до тех пор, пока не появится возможность их доставить. 5
- Явное разделение ответственности. 5 Сервис сосредоточен на своей основной бизнес-логике и локальной согласованности данных, в то время как отдельный компонент заботится о надёжной доставке событий во внешний мир. 5
- Сохранение порядка сообщений. 1 Сообщения отправляются в том порядке, в котором они были добавлены в таблицу outbox. 1
Некоторые недостатки применения Transactional Outbox:
- Потребность в дополнительных ресурсах. 1 Паттерн может быть ресурсоёмким, особенно если база данных часто обновляется. 1
- Задержка между фиксацией транзакции и отправкой сообщений. 1 В некоторых сценариях это может быть неприемлемо. 1
- Необходимость в дополнительном процессе. 1 Для чтения сообщений из таблицы outbox и отправки их в брокер сообщений требуется дополнительный процесс (Outbox Processor). 1
- Потенциальная подверженность ошибкам. 4 Разработчик может забыть опубликовать сообщение/событие после обновления базы данных. 4
- Ретранслятор сообщений может публиковать сообщения более одного раза. 4 Например, аварийно завершать работу после публикации сообщения, но до того, как это будет зафиксировано. 4