Giao diện
@digiforce-nc/plugin-pubsub-adapter-redis
Plugin Pub/Sub qua Redis Streams — cho phép các instance trong cluster giao tiếp real-time thông qua Redis Streams.
Plugin này làm gì?
Khi chạy nhiều instance, sự kiện phát sinh trên instance A cần thông báo cho instance B (ví dụ: invalidate cache, sync config, broadcast notification). Plugin đăng ký Redis Streams adapter vào hệ thống PubSubManager, cho phép publish/subscribe message giữa các instance.
Lưu ý kỹ thuật: Plugin sử dụng Redis Streams (
XADD/XREAD), không phải Redis Pub/Sub truyền thống. Streams có ưu điểm: message được lưu trữ tạm thời (retention ~1000 entries), subscriber có thể đọc lại message đã bỏ lỡ kể từ thời điểm khởi động.
Tính năng chính
| # | Tính năng | Mô tả |
|---|---|---|
| 1 | Redis Streams | Message được lưu trữ (retention ~1000 entries), hỗ trợ đọc lại |
| 2 | Blocking read | XREAD BLOCK 1000 — tiết kiệm CPU khi không có message mới |
| 3 | Auto-reconnect | Tự kết nối lại khi Redis mất kết nối |
| 4 | Auto-trim | Stream tự động trim ~1000 entries (MAXLEN approximate) |
| 5 | Drop-in adapter | Thay thế PubSub adapter mặc định, không cần sửa code |
Biến môi trường
| Biến | Mặc định | Mô tả |
|---|---|---|
PUBSUB_ADAPTER_REDIS_URL | (bắt buộc) | URL kết nối Redis (VD: redis://localhost:6379/0) |
PUBSUB_CONNECTION_RETRY_MAX_ATTEMPTS | 20 | Số lần retry tối đa khi kết nối thất bại |
PUBSUB_CONNECTION_RETRY_DELAY | 200 | Delay giữa các lần retry (ms), tăng tuyến tính: retries × delay |
Kiến trúc nội bộ
| Thành phần | Vai trò |
|---|---|
RedisPubSubAdapter | Implement IPubSubAdapter — quản lý kết nối và channels |
publish(channel, content) | Gửi message lên Redis Stream (XADD) |
subscribe(channel, callback) | Đăng ký lắng nghe message từ channel |
unsubscribe(channel, callback) | Hủy đăng ký |
listen() | Vòng lặp XREAD BLOCK liên tục đọc message mới |
Dependencies
| Package | Vai trò |
|---|---|
@digiforce-nc/server | Server framework — IPubSubAdapter interface |
redis (^4.6.10) | Redis client (node-redis v4) |