Trang này gom toàn bộ producer, queue, worker, QueueEvents và các service đang gọi job.
Mục tiêu là mở vào là biết worker nào đang chạy, queue nào đang nhận job, payload đi qua đâu, và những phần nào hiện chỉ có code nhưng chưa được wire đầy đủ.
current inventory
4
BullMQ queues
4
Worker classes
6
Job names
2
Redis list buffers
01
Runtime Stack
Job system dùng BullMQ cho queue/worker chính, Redis client cho một số data structure riêng, và QueueEvents để quan sát trạng thái job.
Producers
src/modules/job
Các class producer expose method enqueue job. Service gọi producer, producer gọi queue.add.
Workers
workers/*.ts
Mỗi worker tạo bằng createWorker, switch theo job.name, concurrency mặc định 3.
QueueEvents
queues/*.ts
Monitor waiting, active, completed, failed cho email/bloom/pinecone. Like chưa có QueueEvents file riêng.
Redis
redisQueueredisWorker
BullMQ dùng IORedis riêng. App cũng dùng redisService cho Bloom filter, blacklist, sets và Redis lists.
02
Worker Matrix
Bảng này là bản đồ chính: queue nào, job name nào, producer nào enqueue, worker nào xử lý, side effect là gì.
BullMQ
EmailWorker
EmailProducer enqueue vào email_queue.
Worker nhận send_verification_email hoặc send_forgot_password_email.
Render EJS template từ thư mục template/.
Gửi mail qua nodemailerService.sendMail.
wired
Được gọi bởi AuthService.forgotPassword và AuthService.resendVerifyEmail.
npm run queue
# tsx queues/index.ts
# subscribe QueueEvents for email/bloom/pinecone
script caveat
npm run all:workers:queues
# currently uses &&
# worker process is long-running
# queue script may not start after it
07
Current Notes & Sharp Edges
Các ghi chú này phản ánh code hiện tại. Theo yêu cầu, tài liệu chỉ ghi lại để team nhìn rõ, không sửa behavior.
like worker
LikeProducer có initSyncJob repeat mỗi 5 giây, nhưng chưa thấy service/startup nào gọi method này. Nếu không enqueue job đó, processAddLike/processRemoveLike sẽ không chạy.
like batch
rPopCustomBatch gọi lMPop nhưng hiện trả về mảng results rỗng, chưa parse dữ liệu từ Redis response.
like remove
processRemoveLike hiện gọi likeRepository.createMany thay vì deleteMany, sau đó decrement count. Đây là behavior đang đọc được từ code.
sync-post-like
syncPostLike đọc rpop post:<publicId>:likes, trong khi request path đang dùng Redis set sAdd/sRem trên cùng key. Phần xử lý chính bên trong method đang comment nhiều.
queue events
QueueEvents dùng constructor mặc định chưa truyền connection từ redisQueue; nó sẽ dựa vào BullMQ default connection behavior.
constants
BLOOM_KEY.FILTER_USERNAME và BLOOM_KEY.FILTER_EMAIL có trailing spaces trong constant, nhưng worker/service hiện hard-code key không có trailing spaces.
email producer
CreateVerifyEmailProducer có userName, nhưng EmailWorker.sendVerificationEmail chỉ dùng email và token.