From dee9bc44202becaa4160bbd41d68d2ec560798c8 Mon Sep 17 00:00:00 2001 From: sladro Date: Fri, 6 Feb 2026 10:34:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=88=AA=E7=8F=AD=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E6=81=A2=E5=A4=8DWebSocket=E6=8E=A8=E9=80=81=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BC=93=E5=AD=98=E7=AE=A1=E7=90=86=E3=80=82?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95=E4=BB=A5?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=B9=B6=E5=8F=91=E5=A4=84=E7=90=86=EF=BC=8C?= =?UTF-8?q?=E7=A1=AE=E4=BF=9D=E9=80=9A=E7=9F=A5=E4=B8=8D=E8=A2=AB=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E6=8E=A8=E9=80=81=E3=80=82=E6=9B=B4=E6=96=B0=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=96=87=E6=A1=A3=E4=BB=A5=E5=8F=8D=E6=98=A0=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DataProcessingService.java | 16 ++++++++++-- 命令.md | 25 ++++++++++++++++++- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/qaup-collision/src/main/java/com/qaup/collision/dataprocessing/service/DataProcessingService.java b/qaup-collision/src/main/java/com/qaup/collision/dataprocessing/service/DataProcessingService.java index 22558ea..dc13578 100644 --- a/qaup-collision/src/main/java/com/qaup/collision/dataprocessing/service/DataProcessingService.java +++ b/qaup-collision/src/main/java/com/qaup/collision/dataprocessing/service/DataProcessingService.java @@ -155,8 +155,9 @@ public class DataProcessingService { // 第三步:处理通用车辆状态数据并发送WebSocket更新 processUniversalVehicleStatusUpdates(); - // 第四步:处理航班通知数据并发送WebSocket更新, 暂时关闭改为用websocket接收 - //processFlightNotificationUpdates(); + // 第四步:处理航班通知数据并发送WebSocket更新 + // 注意:采集侧只缓存;发送侧在处理完成后会清理缓存,避免同一通知被每秒重复推送(刷屏)。 + processFlightNotificationUpdates(); // 第五步:执行路径冲突检测 pathConflictDetectionService.detectPathConflicts(currentActiveObjects); @@ -522,8 +523,12 @@ public class DataProcessingService { log.info("开始处理航班通知数据,缓存数量: {}", flightNotificationCache.size()); + // 这里直接迭代共享的 ConcurrentHashMap: + // - 只在“成功发布事件”后做条件删除 remove(key, value),避免并发覆盖时误删新通知 + // - 失败/无效则保留,允许下一轮重试 for (Map.Entry entry : flightNotificationCache.entrySet()) { try { + final String cacheKey = entry.getKey(); FlightNotification notification = entry.getValue(); // 创建并发布WebSocket事件 @@ -538,6 +543,13 @@ public class DataProcessingService { // 触发基于航班通知的路由查询和更新处理 triggerRouteQueryByFlightNotification(notification); + + // 发布成功后清理缓存,避免每秒重复推送同一条通知直到5分钟后自然淘汰 + // 使用 remove(key, value) 防止并发更新导致误删新通知 + boolean removed = flightNotificationCache.remove(cacheKey, notification); + if (!removed) { + log.debug("航班通知缓存条目未删除(可能已被并发更新/移除): cacheKey={}", cacheKey); + } } else { log.warn("⚠️ 航班进出港通知WebSocket事件创建失败或无效: {}", notification.getFlightNo()); } diff --git a/命令.md b/命令.md index 3aeb400..7473e3f 100644 --- a/命令.md +++ b/命令.md @@ -40,6 +40,8 @@ docker logs qaup-app | grep -n "flight-notifications" | tail -n 200 ### 确定adapter没问题 tail -n 20000 /home/project_20250804/qaup/adxp-adapter/logs/adapter-logs.log | grep -E "事件的类型是|ADXP_NAOMS_O_CDM_AXOT" | tail -n 200 + + docker logs qaup-app | grep -E "通过WebSocket接收到|AXOT|BizKey|ActualPushback" | tail -n 200 docker exec -it qaup-app sh -lc ' @@ -49,4 +51,25 @@ while true; do echo "$(date +%T) no-axot"; sleep 1; done -' \ No newline at end of file +' + + +docker exec -it qaup-app sh -lc 'grep -nE "已连接到ADXP适配器WebSocket服务|正在连接到ADXP适配器WebSocket服务|数据中台航班 SDK 配置不完整|接收到 [0-9]+ 条航班通知|通过WebSocket接收到|新增航班通知缓存|合并航班通知缓存|数据无效|未知的服务代码|解析消息失败" /logs/sys-info.log /logs/sys-error.log 2>/dev/null | tail -n 200' + +tail -n 200000 /home/project_20250804/qaup/adxp-adapter/logs/adapter-logs.log \ +| grep -E "事件的类型是ADXP_NAOMS_O_(CDM_AXOT|DYN_ARR|CDM_RUNWAY|DYN_DFIE|DYN_DFDE|DYN_TISFLIGHT|DYN_CRAFTSEAT)" \ +| tail -n 200 + +tail -n 200000 /home/project_20250804/qaup/adxp-adapter/logs/adapter-logs.log \ +| grep -E "ERROR|异常|断开|close|重连|reconnect|失败|fail|timeout" \ +| tail -n 200 + + +curl -s http://10.64.58.228:8086/api/adxp/status +curl -s http://10.64.58.228:8086/api/adxp/health + +curl -s -X POST http://10.64.58.228:8086/api/adxp/reconnect + +docker exec -it qaup-app sh -lc 'grep -nE "连接到ADXP适配器WebSocket服务|已连接到ADXP适配器WebSocket服务|数据中台航班 SDK 配置不完整|接收到 .* 条航班通知|通过WebSocket接收到 .* 条航班进出港通知|数据中台航班 SDK 未启用|未获取到航班进出港通知数据|航班进出港通知数据无效" /logs/sys-info.log /logs/sys-error.log 2>/dev/null | tail -n 200' + +docker exec -it qaup-app sh -lc 'grep -nE "接收到 [0-9]+ 条航班通知|通过WebSocket接收到|新增航班通知缓存|合并航班通知缓存|发布航班进出港通知WebSocket事件" /logs/sys-info.log /logs/sys-error.log 2>/dev/null | tail -n 200' \ No newline at end of file