功能:截图处理器按device_id过滤请求,consumer name加设备标识

This commit is contained in:
2026-03-20 22:20:20 +08:00
parent 56bf454135
commit 5049f7b26b
2 changed files with 45 additions and 3 deletions

32
.env Normal file
View File

@@ -0,0 +1,32 @@
# Local debug overrides
DEBUG_SERVER_HOST=0.0.0.0
# Alarm upload - cloud API URL (WVP backend)
CLOUD_API_URL=http://124.221.55.225:18080
# ===== 边缘设备 ID第二台 Edge 节点,必须与 WVP 数据库 ROI 表的 device_id 一致) =====
EDGE_DEVICE_ID=edge_002
# ===== 配置同步模式REDIS=监听云端Stream, LOCAL=仅本地SQLite =====
CONFIG_SYNC_MODE=REDIS
# ===== 云端 Redis截图处理器 + 配置同步db=1 =====
CLOUD_REDIS_HOST=sh-crs-6upea3zn.sql.tencentcdb.com
CLOUD_REDIS_PORT=24637
CLOUD_REDIS_DB=1
CLOUD_REDIS_PASSWORD=HkVZkVnn1
# ===== 腾讯云 COS截图上传 =====
COS_REGION=ap-shanghai
COS_BUCKET=xhwkzx-1-1389966313
COS_SECRET_ID=AKIDVxPiqmVhYv7FCwVqytdAVddQ2TJySt9I
COS_SECRET_KEY=1rVyEI8mMVWs21xfBUjy4BE6DA4z7KWb
# ===== 本地 Redis告警队列、配置缓存 =====
LOCAL_REDIS_HOST=localhost
LOCAL_REDIS_PORT=6379
LOCAL_REDIS_DB=0
# ===== 推理配置GTX 1050 Ti 2GB 显存优化) =====
BATCH_SIZE=1
VIDEO_DEFAULT_FPS=3

View File

@@ -26,7 +26,7 @@ logger = logging.getLogger(__name__)
# Redis 常量
SNAP_REQUEST_STREAM = "edge_snap_request"
SNAP_CONSUMER_GROUP = "edge_snap_group"
SNAP_CONSUMER_NAME = "edge_snap_worker"
SNAP_CONSUMER_NAME_PREFIX = "edge_snap_worker"
SNAP_RESULT_KEY_PREFIX = "snap:result:"
SNAP_RESULT_TTL = 60 # 降级结果 key 60s 过期
@@ -54,6 +54,8 @@ class ScreenshotHandler:
self._settings = get_settings()
self._cos_client = None
self._cos_config: COSConfig = self._settings.cos
self._device_id = self._settings.mqtt.device_id
self._consumer_name = f"{SNAP_CONSUMER_NAME_PREFIX}_{self._device_id}"
self._thread: Optional[threading.Thread] = None
self._stop_event = threading.Event()
@@ -79,7 +81,8 @@ class ScreenshotHandler:
daemon=True,
)
self._thread.start()
logger.info("[截图] 截图处理器已启动")
logger.info("[截图] 截图处理器已启动, consumer=%s, device_id=%s",
self._consumer_name, self._device_id)
def stop(self):
"""停止截图监听线程"""
@@ -159,7 +162,7 @@ class ScreenshotHandler:
try:
results = self._cloud_redis.xreadgroup(
SNAP_CONSUMER_GROUP,
SNAP_CONSUMER_NAME,
self._consumer_name,
{SNAP_REQUEST_STREAM: ">"},
count=1,
block=5000,
@@ -221,6 +224,13 @@ class ScreenshotHandler:
})
return
# 多 Edge 设备隔离:如果消息指定了 device_id 且不是本设备,跳过
target_device_id = fields.get("device_id", "")
if target_device_id and target_device_id != self._device_id:
logger.debug("[截图] 跳过非本设备请求: target=%s, self=%s, request_id=%s",
target_device_id, self._device_id, request_id)
return
rtsp_url = fields.get("rtsp_url", "")
logger.info("[截图] 收到截图请求: request_id=%s, camera=%s, callback=%s",