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