Вопрос проверяет понимание шаблона Outbox для обеспечения надежной доставки сообщений в распределенных системах.
Pattern Outbox — это подход для надежной отправки сообщений в распределенных системах. Сообщения сначала сохраняются в специальную таблицу "outbox" в той же транзакции, что и бизнес-данные. Затем отдельный процесс читает из outbox и отправляет сообщения в message broker, гарантируя exactly-once доставку.
Outbox pattern решает проблему надежной доставки сообщений при работе с базой данных и брокером сообщений.
Проблема:
Как гарантировать, что сообщение будет отправлено в broker только если бизнес-транзакция успешно завершена?
Решение Outbox pattern:
Сохранение в outbox таблицу:
BEGIN TRANSACTION;
-- Бизнес-операция
INSERT INTO orders (id, amount) VALUES (1, 100);
-- Сохранение сообщения
INSERT INTO outbox (id, topic, payload)
VALUES (gen_random_uuid(), 'order-created', '{"orderId": 1}');
COMMIT;Отдельный процесс (poller):
Периодически проверяет таблицу outbox
Отправляет новые сообщения в брокер
Помечает отправленные сообщения как обработанные
Преимущества:
Гарантирует exactly-once семантику
Избегает распределенные транзакции
Обеспечивает надежность доставки
Реализация с Debezium:
Можно использовать Change Data Capture (CDC) инструменты для автоматического чтения из outbox.
Уровень
Рейтинг:
2
Сложность:
8
Навыки
Postgres
Redis
Ключевые слова
Подпишись на Node.js Developer в телеграм