The Outbox Pattern solves a critical bug in distributed systems: Dual-Writes. If you save an order to the DB and then send an email, what happens if the network dies *between* those two steps? You either have an order with no email, or an email for an order that failed. The Outbox ensures they happen atomically.
Order and you save the OrderCreatedEvent into the Outbox table.Because the Outbox is in the **Same Database** as your business data, the SQL transaction guarantees that you will never have an event without the corresponding data. Reliability becomes 100%.
Q: "What is the 'Inbox' pattern, and why is it used alongside the 'Outbox'?"
Architect Answer: "The **Inbox Pattern** is used by the *Consumer*. When a message arrives, the consumer saves it to an 'Inbox' table before processing. If the consumer crashes halfway through, it can restart and see that the message is in the Inbox but not yet processed. It also prevents processing the same message twice (Idempotency) because it can check if the MessageID already exists in the Inbox table."