Outbox - запись бизнес-события и сообщения для публикации в одну транзакцию в БД; отдельный процесс читает outbox и публикует в очередь. Гарантирует доставку при сбое после commit. В Go: таблица outbox (id, aggregate_id, payload, created_at, published); в той же транзакции INSERT в outbox; воркер SELECT неопубликованных, публикует в Kafka/RabbitMQ, помечает опубликованными.
tx.ExecContext(ctx, "INSERT INTO orders ...")
tx.ExecContext(ctx, "INSERT INTO outbox (topic, payload) VALUES ($1, $2)", "order.created", json)