Distributed transactions: Reference architecture
Domain mutations and outbox rows share one database transaction; a relay publishes at-least-once; consumers are idempotent; writing the database and a broker independently without an outbox is forbidden.