我是否需要任何代理才能使 FIWARE Orion Context Broker 可以看到 Context Provider?
Do I need any proxy to make Context Provider visible by FIWARE Orion Context Broker?
我无法从 docker 安装的 Orion Context Broker 中注册的 Context Provider 获取属性。我需要更多东西吗(例如特殊上下文代理?)
设置
在执行以下命令后,我已经完成了整个 Orion Context Broker 的所有设置和 运行:
docker pull mongo:3.6
docker pull fiware/orion
docker network create fiware_default
docker run -d --name=mongo-db --network=fiware_default \
--expose=27017 mongo:3.6 --bind_ip_all --smallfiles
docker run -d --name fiware-orion -h orion --network=fiware_default \
-p 1026:1026 fiware/orion -dbhost mongo-db
实体
我还通过 运行 添加了一个商店实体(来自 https://github.com/Fiware/tutorials.Getting-Started 教程):
curl -iX POST \
'http://localhost:1026/v2/entities' \
-H 'Content-Type: application/json' \
-d '
{
"id": "urn:ngsi-ld:Store:001",
"type": "Store",
"address": {
"type": "PostalAddress",
"value": {
"streetAddress": "Bornholmer Straße 65",
"addressRegion": "Berlin",
"addressLocality": "Prenzlauer Berg",
"postalCode": "10439"
}
},
"location": {
"type": "geo:json",
"value": {
"type": "Point",
"coordinates": [13.3986, 52.5547]
}
},
"name": {
"type": "Text",
"value": "Bösebrücke Einkauf"
}
}'
另外我也成功注册了我的Context Provider:
curl -iX POST 'http://localhost:1026/v2/registrations' -H 'Content-Type: application/json' -d '{
"description": "Temperature Provider",
"dataProvided": {
"entities": [
{
"id": "urn:ngsi-ld:Store:001",
"type": "Store"
}
],
"attrs": [
"temperature"
]
},
"provider": {
"http": {
"url": "http://192.168.xxx.xxx:8080/temperature"
},
"legacyForwarding": true
}
}'
上下文提供者
我在 http://192.168.xxx.xxx:8080/temperature 本地公开了我的 Context Provider(由我在 Java 10 中编写的 SpringBoot 应用程序公开)。 JSON 数据(在 html 正文中返回)采用 NSGI v1 格式,如下所示:
{
"contextResponses": [
{
"contextElement": {
"attributes": [
{
"name": "temperature",
"type": "float",
"value": "16"
}
],
"id": "urn:ngsi-ld:Store:001",
"isPattern": "false",
"type": "Store"
},
"statusCode": {
"code": "200",
"reasonPhrase": "OK"
}
}
]
}
问题
当我尝试获取其他实体的属性(如名称)时它工作正常,但是当我尝试使用此查询获取温度属性时:
curl -X GET 'http://192.168.xxx.xxx:1026/v2/entities/urn:ngsi-ld:Store:001/attrs/temperature/value'
我收到以下错误:
{"error":"NotFound","description":"The entity does not have such an attribute"}
在 Context Broker 中登录 docker:
time=2018-12-07T09:18:02.846Z | lvl=WARN | corr=N/A | trans=N/A | from=N/A | srv=N/A | subsrv=N/A | comp=Orion | op=AlarmManager.cpp[405]:badInput | msg=Raising alarm BadInput 192.168.115.126: JSON Parse Error: unknown field: /timestamp
time=2018-12-07T09:18:02.847Z | lvl=WARN | corr=N/A | trans=N/A | from=N/A | srv=N/A | subsrv=N/A | comp=Orion | op=postQueryContext.cpp[196]:queryForward | msg=Internal Error (error parsing reply from prov app: )
我的设置中是否需要更多内容才能使此上下文提供程序正常工作(例如特殊上下文代理)?
好的,我花了一些时间,但我找到了答案。在这种情况下不需要代理。
上下文代理发出的不是 GET,而是 POST 请求,不是针对给定的 url,而是针对 url +“/queryContext”。我更改了我的 REST 客户端,它现在对我来说工作正常。
我无法从 docker 安装的 Orion Context Broker 中注册的 Context Provider 获取属性。我需要更多东西吗(例如特殊上下文代理?)
设置
在执行以下命令后,我已经完成了整个 Orion Context Broker 的所有设置和 运行:
docker pull mongo:3.6
docker pull fiware/orion
docker network create fiware_default
docker run -d --name=mongo-db --network=fiware_default \
--expose=27017 mongo:3.6 --bind_ip_all --smallfiles
docker run -d --name fiware-orion -h orion --network=fiware_default \
-p 1026:1026 fiware/orion -dbhost mongo-db
实体
我还通过 运行 添加了一个商店实体(来自 https://github.com/Fiware/tutorials.Getting-Started 教程):
curl -iX POST \
'http://localhost:1026/v2/entities' \
-H 'Content-Type: application/json' \
-d '
{
"id": "urn:ngsi-ld:Store:001",
"type": "Store",
"address": {
"type": "PostalAddress",
"value": {
"streetAddress": "Bornholmer Straße 65",
"addressRegion": "Berlin",
"addressLocality": "Prenzlauer Berg",
"postalCode": "10439"
}
},
"location": {
"type": "geo:json",
"value": {
"type": "Point",
"coordinates": [13.3986, 52.5547]
}
},
"name": {
"type": "Text",
"value": "Bösebrücke Einkauf"
}
}'
另外我也成功注册了我的Context Provider:
curl -iX POST 'http://localhost:1026/v2/registrations' -H 'Content-Type: application/json' -d '{
"description": "Temperature Provider",
"dataProvided": {
"entities": [
{
"id": "urn:ngsi-ld:Store:001",
"type": "Store"
}
],
"attrs": [
"temperature"
]
},
"provider": {
"http": {
"url": "http://192.168.xxx.xxx:8080/temperature"
},
"legacyForwarding": true
}
}'
上下文提供者
我在 http://192.168.xxx.xxx:8080/temperature 本地公开了我的 Context Provider(由我在 Java 10 中编写的 SpringBoot 应用程序公开)。 JSON 数据(在 html 正文中返回)采用 NSGI v1 格式,如下所示:
{
"contextResponses": [
{
"contextElement": {
"attributes": [
{
"name": "temperature",
"type": "float",
"value": "16"
}
],
"id": "urn:ngsi-ld:Store:001",
"isPattern": "false",
"type": "Store"
},
"statusCode": {
"code": "200",
"reasonPhrase": "OK"
}
}
]
}
问题
当我尝试获取其他实体的属性(如名称)时它工作正常,但是当我尝试使用此查询获取温度属性时:
curl -X GET 'http://192.168.xxx.xxx:1026/v2/entities/urn:ngsi-ld:Store:001/attrs/temperature/value'
我收到以下错误:
{"error":"NotFound","description":"The entity does not have such an attribute"}
在 Context Broker 中登录 docker:
time=2018-12-07T09:18:02.846Z | lvl=WARN | corr=N/A | trans=N/A | from=N/A | srv=N/A | subsrv=N/A | comp=Orion | op=AlarmManager.cpp[405]:badInput | msg=Raising alarm BadInput 192.168.115.126: JSON Parse Error: unknown field: /timestamp
time=2018-12-07T09:18:02.847Z | lvl=WARN | corr=N/A | trans=N/A | from=N/A | srv=N/A | subsrv=N/A | comp=Orion | op=postQueryContext.cpp[196]:queryForward | msg=Internal Error (error parsing reply from prov app: )
我的设置中是否需要更多内容才能使此上下文提供程序正常工作(例如特殊上下文代理)?
好的,我花了一些时间,但我找到了答案。在这种情况下不需要代理。
上下文代理发出的不是 GET,而是 POST 请求,不是针对给定的 url,而是针对 url +“/queryContext”。我更改了我的 REST 客户端,它现在对我来说工作正常。