Giao diện
@digiforce-nc/plugin-queue-adapter-rabbitmq
Plugin message queue qua RabbitMQ — xử lý tác vụ nền (background job) tin cậy với guaranteed delivery, retry, concurrency control, và graceful shutdown.
Plugin này làm gì?
Các tác vụ nặng (gửi email, xử lý file, đồng bộ dữ liệu) không nên chạy trong request cycle. Plugin đăng ký RabbitMQ adapter vào hệ thống Event Queue, cho phép đẩy job vào queue và consumer xử lý bất đồng bộ với đảm bảo message không bị mất.
Tính năng chính
| # | Tính năng | Mô tả |
|---|---|---|
| 1 | Guaranteed delivery | Message lưu trữ persistent trong RabbitMQ |
| 2 | Prefetch / Concurrency | Kiểm soát số message consumer nhận đồng thời |
| 3 | Retry + max retries | Tự retry khi thất bại, dừng sau N lần |
| 4 | Timeout (AbortSignal) | Mỗi job có timeout — tự cancel nếu quá lâu |
| 5 | Graceful shutdown | Cancel consume → chờ job đang xử lý → đóng kết nối |
| 6 | Auto-reconnect | Tự kết nối lại khi RabbitMQ mất kết nối |
| 7 | Channel per queue | Mỗi queue sử dụng channel riêng biệt |
Biến môi trường
| Biến | Mặc định | Mô tả |
|---|---|---|
QUEUE_ADAPTER | (bắt buộc) | Phải đặt rabbitmq để kích hoạt adapter |
QUEUE_ADAPTER_RABBITMQ_URL | (bắt buộc) | URL kết nối RabbitMQ (VD: amqp://guest:guest@localhost:5672) |
QUEUE_CONNECTION_RETRY_MAX_ATTEMPTS | 20 | Số lần retry tối đa khi kết nối thất bại |
QUEUE_CONNECTION_RETRY_DELAY | 200 | Delay giữa các lần retry (ms) |
Kiến trúc nội bộ
| Thành phần | Vai trò |
|---|---|
RabbitMQAdapter | Implement IEventQueueAdapter — quản lý connection, channels, subscriptions |
publish(name, payload, options) | Gửi message vào queue (assertQueue + sendToQueue) |
subscribe(name, options) | Đăng ký consumer cho queue (assertQueue + prefetch + consume) |
process(name, channel, message) | Xử lý message — gọi event.process(), retry khi lỗi |
close(force) | Graceful shutdown — cancel consume → chờ processing → đóng |
Dependencies
| Package | Vai trò |
|---|---|
@digiforce-nc/server | Server framework — IEventQueueAdapter interface |
@digiforce-nc/logger | Logger framework |
amqplib (^0.10.9) | RabbitMQ AMQP client |