Architecture · Background Jobs

Background jobs và worker

Trang này giải thích các queue/worker đang chạy sau lưng API, khi nào chúng được enqueue, và điều gì xảy ra nếu job fail.

Snapshot 12/06/2026: code khai báo 11 queue names và export 9 worker implementations. friend_request_queue chưa có worker riêng; likes_events được consume bên trong like worker.

Danh sách job

QueueTriggerWorkerMục đích
email_queueAuth/circle invitationemail.workerVerify, forgot-password và invitation email.
bloom_queueRegisterbloom.workerCập nhật Redis Bloom username/email.
pinecone_queueCreate/index postpine.workerMixedbread embedding và Pinecone upsert.
like_queue + likes_eventsLike event + repeat synclike.workerĐồng bộ Redis like state về DB và notification count.
notificationReply/mention/like debouncenotification.workerFlush grouped notification sau khoảng chờ.
message_queueMessage debouncemessage.workerFlush realtime chat notification.
evaluation_queueCircle post/reportevaluate.workerOpenRouter scoring và report evaluation.
delta_hp_queueRepeat job từ server bootstrapdelta-hp.workerĐiều chỉnh circle HP.
auto_remove_ban_queueRepeat job từ server bootstrapauto-remove-ban.workerGỡ ban đã hết hạn.
friend_request_queueProducer đã khai báoChưa có worker riêngKhông nên phụ thuộc cho tới khi có consumer rõ ràng.

Sequence diagram job nền

ClientRouterControllerServiceRepository/Workerworkersvalidateservice methodDB/Redis/joberrorresponse JSON
Mỗi mũi tên là một lần gọi thật trong kiến trúc route → controller → service → repository/worker.

Error handling

JobKhi fail thì sao?Dead letter queue?
emailJob throw nếu render/send mail fail.Không thấy DLQ riêng.
evaluationThrow để BullMQ mark failed; report/post quality không cập nhật nếu fail.Không thấy DLQ riêng.
notificationInvalid Redis key bị skip và remove khỏi zset.Không thấy DLQ riêng.
likeLock tránh trùng sync; parse item lỗi bị bỏ qua.Không thấy DLQ riêng.
delta HPCatch log error, có thể không fail job.Không thấy DLQ riêng.