Message chết (dead letter)
Queue nemo12-events retry tối đa 5 lần với backoff (workers/api/wrangler.jsonc, consumer trong workers/api/src/index.ts). Hết lượt thì consumer ghi message vào bảng D1 queue_dead_letters rồi mới ack, nên sổ D1 là nguồn sự thật, không phải queue nemo12-events-dlq của Cloudflare (được khai nhưng không có consumer — cố ý, xem queues).
Xem
- Admin → Ops (admin.nemo12.com, sau Cloudflare Access), hoặc
GET /v1/admin/dead-letters(vai admin). - Mỗi dòng (
queue_dead_letters, migration 0036):message_id, loại event,error_text(lỗi lần cuối), vàreplay_status(pending·replayed·failed·discarded).
Chạy lại
POST /v1/admin/dead-letters/{id}/replay (nút trên Admin → Ops). An toàn để bấm nhiều lần: consumer claim theo khoá type:idempotency_key trong KV trước khi xử lý và chỉ mark sau khi thành công (shared/reliability.ts), nên message đã xử lý xong sẽ bị bỏ qua. Mỗi lần replay để lại một dòng audit_log với action dlq.<replay_status> (dlq.replayed hoặc dlq.failed).
Khi nào KHÔNG replay
- Lỗi là do payload sai hình (schema đổi): replay lại vẫn chết. Sửa consumer trước.
- Handler của
typeđó vẫn là no-op (hiện tại 22 event chưa có consumer nghiệp vụ — Audit #013 C-18): replay chỉ đổi trạng thái sổ, không tạo ra kết quả gì.
Cảnh báo
Chưa có alert tự động khi bảng này tăng (Audit #013 I-9, việc tay: Cloudflare Notifications + uptime). Tới lúc đó: mở Admin → Ops mỗi sáng, hoặc đếm queue_dead_letters có replay_status='pending' qua GET /v1/admin/dead-letters.