Bỏ qua, đến nội dung

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:5672

Quan trọng: QUEUE_ADAPTER=rabbitmq là đ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ếnMặc địnhMô 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_ATTEMPTS20Số lần retry khi kết nối thất bại
QUEUE_CONNECTION_RETRY_DELAY200Delay 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 địnhMô tả
timeoutQUEUE_DEFAULT_ACK_TIMEOUTTimeout cho mỗi job (AbortSignal)
maxRetries0Số lần retry tối đa (0 = không retry)
retried0Số lần đã retry (tự tăng khi re-publish)
timestampDate.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:

  1. NACK message (trả về queue)
  2. Cancel consume
  3. Chờ interval ms rồi kiểm tra lại
  4. 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:

  1. Tạo channel mới cho queue đó
  2. Thiết lập lại consumer

Nếu connection bị đóng, plugin:

  1. Đóng tất cả channels
  2. Kết nối lại
  3. 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