feat(server): WebSocket 广播支持 Redis Pub/Sub 跨节点扇出(REDIS_ADDR 可选开关)
- 新增 ws.EventBus 接口与 RedisBus 实现;Hub 五类广播改为发布信封、各节点订阅后本地投递 - 单实例不设 REDIS_ADDR 保持进程内直投;Redis 不可用时自动兜底本地投递 - config 新增 REDIS_ADDR/REDIS_PASSWORD/REDIS_DB;dev compose 增加 --profile redis (6380) - prod compose 与 .env.prod.example 增加多副本配置说明;README 更新已知边界 - 已用双实例 + 真实 Redis 实测跨节点推送;新增总线单测(含发布失败兜底),-race 通过
This commit is contained in:
@@ -66,6 +66,17 @@ services:
|
||||
MINIO_ROOT_PASSWORD: ${STORAGE_SECRET_KEY}
|
||||
STORAGE_BUCKET: ${STORAGE_BUCKET:-kefu}
|
||||
|
||||
# 可选:跨节点 WebSocket 广播总线(API 扩多副本时启用)
|
||||
# .env.prod 设置 REDIS_ADDR=redis:6379 并为 api 副本配置相同值
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: kefu-cloud-redis
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- kefu_cloud_redisdata:/data
|
||||
networks:
|
||||
- kefu_cloud_net
|
||||
|
||||
api:
|
||||
build:
|
||||
context: .
|
||||
@@ -100,6 +111,10 @@ services:
|
||||
STORAGE_MAX_UPLOAD_MB: ${STORAGE_MAX_UPLOAD_MB:-10}
|
||||
STORAGE_MAX_IMAGE_EDGE: ${STORAGE_MAX_IMAGE_EDGE:-1920}
|
||||
STORAGE_WEBP_QUALITY: ${STORAGE_WEBP_QUALITY:-80}
|
||||
# 跨节点 WebSocket 广播(多副本时设为 redis:6379;单实例留空即进程内广播)
|
||||
REDIS_ADDR: ${REDIS_ADDR:-}
|
||||
REDIS_PASSWORD: ${REDIS_PASSWORD:-}
|
||||
REDIS_DB: ${REDIS_DB:-0}
|
||||
networks:
|
||||
- kefu_cloud_net
|
||||
# 不对外暴露 8080,统一走 nginx
|
||||
@@ -158,3 +173,4 @@ networks:
|
||||
volumes:
|
||||
kefu_cloud_pgdata:
|
||||
kefu_cloud_miniodata:
|
||||
kefu_cloud_redisdata:
|
||||
|
||||
Reference in New Issue
Block a user