功能:截图处理器按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

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",