Giao diện
Hướng dẫn cài đặt — Queue Adapter RabbitMQ
Yêu cầu
- Server Digiforce đang chạy
- RabbitMQ server đang hoạt động và có thể kết nối từ Digiforce
Bước 1: Kích hoạt Plugin
Vào Settings → Plugin Manager, tìm plugin-queue-adapter-rabbitmq và bật.
Bước 2: Cấu hình biến môi trường
Đặt hai biến bắt buộc:
bash
QUEUE_ADAPTER=rabbitmq
QUEUE_ADAPTER_RABBITMQ_URL=amqp://guest:guest@localhost:5672Quan trọng:
QUEUE_ADAPTER=rabbitmqlà điều kiện tiên quyết. Nếu không đặt biến này, plugin sẽ không kích hoạt adapter dù đã bật trong Plugin Manager.
Tất cả biến môi trường
| Biến | Mặc định | Mô tả |
|---|---|---|
QUEUE_ADAPTER | (bắt buộc) | Đặt rabbitmq |
QUEUE_ADAPTER_RABBITMQ_URL | (bắt buộc) | URL kết nối AMQP |
QUEUE_CONNECTION_RETRY_MAX_ATTEMPTS | 20 | Số lần retry khi kết nối thất bại |
QUEUE_CONNECTION_RETRY_DELAY | 200 | Delay giữa các lần retry (ms, tăng tuyến tính) |
Bước 3: Khởi động lại server
Khởi động lại server và kiểm tra log. Plugin ghi log khi:
- Kết nối thành công (không có log lỗi)
- Kết nối thất bại:
rabbitmq connect failed, retries: N - Kết nối lại:
rabbitmq reconnecting...→rabbitmq reconnect success
Luồng xử lý message chi tiết
Các tham số message
| Tham số | Mặc định | Mô tả |
|---|---|---|
timeout | QUEUE_DEFAULT_ACK_TIMEOUT | Timeout cho mỗi job (AbortSignal) |
maxRetries | 0 | Số lần retry tối đa (0 = không retry) |
retried | 0 | Số lần đã retry (tự tăng khi re-publish) |
timestamp | Date.now() | Thời điểm publish message |
Concurrency và Prefetch
Plugin sử dụng channel.prefetch(concurrency) để giới hạn số message RabbitMQ gửi cho consumer cùng lúc. Giá trị mặc định là QUEUE_DEFAULT_CONCURRENCY từ server framework.
Idle check
Trước khi xử lý message, plugin kiểm tra event.idle(). Nếu consumer đang bận:
- NACK message (trả về queue)
- Cancel consume
- Chờ
intervalms rồi kiểm tra lại - Resume consume khi idle
Graceful Shutdown
Khi server tắt, plugin thực hiện graceful shutdown:
Channel tự động phục hồi
Nếu một channel bị đóng (lỗi mạng, RabbitMQ restart channel), plugin tự động:
- Tạo channel mới cho queue đó
- Thiết lập lại consumer
Nếu connection bị đóng, plugin:
- Đóng tất cả channels
- Kết nối lại
- Khôi phục tất cả consumers
Lưu ý triển khai
- RabbitMQ cần accessible từ tất cả instance của Digiforce
- Message ID được sinh từ SHA-256 hash của nội dung
- Mỗi queue sử dụng channel riêng — tránh head-of-line blocking
- Nên bật RabbitMQ Management plugin (
rabbitmq_management) để monitor qua web UI (port 15672) - Khuyến nghị cấu hình durable queues và message persistence cho production