← Back to microservices patterns mapconsistency
📤
Microservices Pattern
Outbox + Inbox Pattern
Use outbox records for reliable sends and inbox records for idempotent receives.
Detailed Description
Outbox solves reliable event publishing. Inbox solves duplicate event processing.
Together they create practical exactly-once effects over systems that normally deliver at least once.
Visual Diagram
Outbox (sender side)
BEGIN TX:
INSERT orders → order data
INSERT outbox → { msgId, event, status:pending }
COMMIT
Poller: read outbox → publish to Kafka → mark sent
Inbox (receiver side)
Receive event { msgId: "m-456" }
CHECK inbox table: msgId=m-456 exists?
→ YES: already processed, skip (idempotent)
→ NO: process + INSERT inbox(m-456)Tradeoffs
Pros
Reliable delivery and deduplication
Cons
Inbox/outbox cleanup and operational complexity
Examples: Debezium outbox, custom outbox poller, inbox table