Call gửi email lỗi thì thôi… mất luôn, không retry.
Tác vụ async như gửi email, sync dữ liệu với bên thứ ba thường được viết kiểu “gọi là xong”. Lỗi? Thì kệ, không retry, không thông báo. Kết quả: email không tới khách, dữ liệu sync thiếu, mà team không hay biết.
![]() |
Email không tới? Chắc tại mạng! |
Vấn đề: Tác vụ async fail silently
Nhiều hệ thống xử lý tác vụ async như:
- Gửi email trực tiếp trong API call, lỗi là mất.
- Sync với API bên thứ ba, timeout thì bỏ qua.
Hậu quả:
- Mất dữ liệu: Email xác nhận đơn hàng không gửi, khách hàng bối rối.
- Khó debug: Không có log, không biết tác vụ fail ở đâu.
Giải pháp: Dùng queue và retry
Để xử lý tác vụ async bền vững:
- Dùng queue: Redis, AWS SQS, hoặc RabbitMQ để xếp hàng tác vụ.
- Retry policy: Áp dụng exponential backoff (thử lại với khoảng cách thời gian tăng dần).
- Logging và alert: Ghi log khi tác vụ fail quá số lần retry, gửi alert qua Slack/Email.
Ví dụ: Thay vì gọi sendEmail() trực tiếp, đẩy vào queue như emailQueue.push({to: "[email protected]", subject: "Order"}).
🎯 Tóm lại: Queue và retry giúp tác vụ async đáng tin cậy hơn. Đừng để hệ thống “im lặng” khi thất bại.
Đăng nhận xét