FIWARE Orion Context Provider配置:气象站作为建筑上下文提供方
问题解答
1. 场景可行性说明
这个场景完全可以通过Orion的Context Provider功能实现,你当前遇到的循环转发、属性不返回的问题是配置逻辑错误导致的:
- 你将Context Provider的地址配置为Orion自身的
http://localhost:1026/v2端点,且注册规则匹配的是Building类型实体的属性查询,导致Orion每次转发请求到自身后,会再次匹配到同一条注册规则,形成无限循环。 - 转发的请求参数默认是查询
Building类型实体的temperature、windspeed属性,而你存储的气象站属性属于Device:WeatherStation类型实体,自然查询不到对应数据,因此返回空结果。
正确的实现逻辑需要在Orion和气象站实体之间新增一个轻量适配服务,职责如下:
- 接收Orion转发的
Building实体属性查询请求 - 主动调用Orion接口查询对应气象站(你的场景里是
urn:ngsi-ld:WeatherStation:001)的temperature、windspeed属性 - 将查询到的气象站属性按照NGSI v2响应格式,映射到请求对应的
Building实体下,返回给Orion - Orion会自动将适配服务返回的属性和
Building实体自身的属性合并后,返回给原始调用方
2. 请求头配置示例
Orion向Context Provider转发请求时,会默认将原始请求携带的fiware-service、fiware-servicepath头原样透传,无需额外配置。如果你的适配服务需要自定义请求头,可以在注册信息的provider.http字段中新增headers参数,示例如下:
{ "id": null, "description": "Random Weather Conditions", "provider": { "http": { "url": "http://你的适配服务地址/query", "headers": { "X-Custom-Header": "自定义头值" } }, "supportedForwardingMode": "all" }, "dataProvided": { "entities": [ { "idPattern": ".*", "type": "Building" } ], "attrs": [ "temperature", "windspeed" ] }, "status": "active" }
多租户适配提示
后续你为不同建筑配置独立fiware-servicepath后,适配服务可以直接读取Orion透传的fiware-servicepath头,匹配对应区域的气象站实体,无需修改注册规则。
内容的提问来源于stack exchange,提问作者tstorek
相关产品推荐
相关产品推荐

