功能:截图处理器按device_id过滤请求,consumer name加设备标识
This commit is contained in:
32
.env
Normal file
32
.env
Normal 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
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user