DLQ (dead letter queue) là nơi chứa message không xử lý được sau khi hết số lần retry. Mục đích là tách message hỏng ra khỏi luồng chính để consumer tiếp tục chạy, đồng thời không mất dữ liệu.
Message vào DLQ phải mang đủ ngữ cảnh để điều tra: payload gốc, original_topic/original_queue, số lần thử, thông báo lỗi + stack trace, thời điểm lỗi, trace_id.
Quy trình vận hành — điểm phân biệt ứng viên có kinh nghiệm thực tế:
1. Cảnh báo: DLQ có message là bất thường, phải bắn alert (số lượng > 0, hoặc vượt ngưỡng), không phải chờ tới lúc khách phàn nàn.
2. Phân loại: lỗi do dữ liệu (payload sai) hay do hệ thống (DB down lúc đó). Nhóm theo thông báo lỗi để thấy nguyên nhân chung.
3. Sửa nguyên nhân rồi mới replay. Replay khi bug chưa sửa chỉ đẩy message vòng lại DLQ.
4. Replay có kiểm soát: có công cụ đẩy message từ DLQ về topic/queue gốc, chạy theo lô nhỏ, giới hạn tốc độ để không tạo đợt tải đột ngột. Consumer phải idempotent vì replay chắc chắn sinh trùng.
5. Loại bỏ có chủ đích: message không bao giờ xử lý được (khách đã huỷ đơn) thì ghi nhận lý do rồi xoá, đừng để DLQ tích tụ vô hạn.
DLQ mà không ai theo dõi thì chỉ là một cách mất dữ liệu chậm hơn.