Kiến trúc · Outbox
Outbox thay cho giao dịch kép
Mẫu outbox với MassTransit
CustomerService ghi Customers và OutboxMessage trong cùng một transaction; tiến trình nền đọc bảng outbox mỗi giây, publish lên RabbitMQ, đánh dấu đã gửi, và consumer idempotent nhận message.
MỘT TRANSACTION
ĐỌC MỖI 1S
ĐÃ GỬI
PUBLISH
CustomerService
SaveChangesAsync()
Customers
dữ liệu nghiệp vụ
OutboxMessage
CustomerCreated
Outbox delivery
tiến trình nền
RabbitMQ
exchange · queue
Consumer
SendWelcomeEmail
Hai dòng cùng commit hoặc cùng rollback.
Chết sau commit: message vẫn nằm trong
bảng và được publish khi khởi động lại.
Có thể nhận một message
hai lần: consumer phải
idempotent.
CHÚ GIẢI
Dịch vụ
Bảng database
Bảng outbox
Broker
Cập nhật trạng thái
© tiennhm