2.5 KiB
2.5 KiB
航空器路由触发式采集测试
修改摘要
已成功将航空器路由采集从周期性访问改为触发式访问:
主要变更
-
新增缓存机制
- 添加了
routeRetrievalCache缓存Map - 缓存键格式:
{flightNo}:{type}:{time} - 配置项:路由缓存过期时间(默认2小时)
- 添加了
-
修改触发逻辑
- 在
triggerRouteQueryByFlightNotification()开始处添加重复检查 - 成功获取路由后标记为已获取
- 基于航班进出港通知的时间戳确保精确去重
- 在
-
禁用周期性采集
collectAircraftRouteAndStatus()默认禁用- 通过配置项
data.collector.route.periodic-collection-enabled控制 - 保留原有方法作为应急备用
-
新增缓存管理
- 定时清理过期缓存记录(每小时执行一次)
- 详细日志记录便于监控
配置说明
在 application.yml 中可添加以下配置:
data:
collector:
route:
cache-expiry-hours: 2 # 路由缓存过期时间(小时)
periodic-collection-enabled: false # 是否启用周期性采集(默认禁用)
预期效果
- 避免重复API调用:同一航班事件(相同航班号+类型+时间戳)的路由只会获取一次
- 事件驱动响应:完全基于航班进出港通知触发,响应更及时
- 减少系统负载:取消周期性轮询,减少不必要的API调用
- 保持数据完整性:每个航班事件都能准确获取和存储路由信息
关键日志示例
- 首次获取:
🛫 航班通知触发路由查询: 航班号=CA8901, 类型=OUT, 时间=1732783090000 - 重复跳过:
🔄 航班路由已获取过,跳过重复查询: 航班号=CA8901, 类型=OUT, 时间=1732783090000 - 成功完成:
🚀 事件驱动的路由更新完成: 航班号=CA8901, 路由类型=OUT, 时间=1732783090000 - 缓存清理:
清理过期路由缓存完成:清理前5条,清理后2条,清理了3条记录
测试验证步骤
- 启动系统:确保 mock_airport.py 正在运行(提供航班进出港通知)
- 观察日志:查看是否有 "周期性路由采集已禁用" 的调试日志
- 监控触发:查看航班进出港通知是否正确触发路由查询
- 验证去重:同一航班事件应该只触发一次路由获取
- 检查缓存:验证缓存清理机制是否正常工作
回滚方案
如需恢复周期性采集,在配置文件中设置:
data:
collector:
route:
periodic-collection-enabled: true