The Transactional Outbox Pattern with Idempotency Keys
The dual-write problem never went away, but when the outbox row and the domain row commit in one atomic batch and the relay marks its work with a storage-layer idempotency key, at-least-once delivery without double-processing is a few hundred lines of PHP, not a Debezium cluster.