编辑2
curl --include \
--header 'Content-Type: application/json' \
--request POST \
--data-binary '{
"description": "Day subscription",
"subject": {
"entities": [
{
"idPattern": "es-leon-.*",
"type": "Event"
}
],
"condition": {
"attrs": [
"Title",
"dFlag"
],
"expression": {
"q": "dFlag>0"
}
}
},
"notification": {
"http": {
"url" : "http://localhost:5050/notify"
},
"attrs": [
"Title",
"dFlag"
],
"attrsFormat":"legacy"
}
}' \
'http://localhost:1026/v2/subscriptions'
在Orion订阅注册确定(感谢评论中的提示)但我遇到的问题与here中的问题相同,即使我使用"attrsFormat":"legacy"
我做错了什么?为什么猎户座没有使用ngsiv1向天鹅座发送通知?
{
"subscriptionId": "574315e77775f31b8d3da719",
"data": [{
"id": "es-leon-0",
"type": "Event",
"Title": {
"type": "none",
"value": "pepe",
"metadata": {}
},
"dFlag": {
"type": "text",
"value": "1",
"metadata": {}
}
}]
}
如果必须回复下面的行,请在ngsiv1:
{
"subscriptionId": "5743178d7775f31b8d3da71a",
"originator": "localhost",
"contextResponses": [{
"contextElement": {
"type": "Event",
"isPattern": "false",
"id": "es-leon-0",
"attributes": [{
"name": "Title",
"type": "text",
"value": "pep"
}, {
"name": "dFlag",
"type": "text",
"value": "1"
}]
},
"statusCode": {
"code": "200",
"reasonPhrase": "OK"
}
}]
}
原始问题
正如other question所说:
编辑:还要注意您可以使用NGSIv2来创建/更新实体 Orion并在NGSIv1中收到通知,如果您:
使用NGSIv1操作创建订阅
使用相同于传统的attrsFormat的NGSIv2操作创建订阅。 请查看更详细的信息here。
所以我编写了这个订阅:
curl --include \
--header 'Content-Type: application/json' \
--request POST \
--data-binary '{
"description": "Day subscription",
"subject": {
"entities": [
{
"idPattern": "es-leon-.*",
"type": "Event"
}
],
"condition": {
"attributes": [
"Title",
"dFlag"
],
"expression": {
"q": "dFlag > 0"
}
}
},
"notification": {
"callback": "http://localhost:5050/notify",
"attributes": [
"Title",
"dFlag"
]
}
}' \
'http://localhost:1026/v1/subscriptions'
但是猎户座不让我注册它会引发这个错误:
HTTP/1.1 400 Bad Request
Connection: Keep-Alive
Content-Length: 67
Content-Type: application/json
Fiware-Correlator: 2ecdfc74-1c2f-11e6-82d7-000d3a23bf27
Date: Tue, 17 May 2016 12:59:25 GMT
{"error":"BadRequest","description":"no condition attrs specified"}
这是使用遗产属性的方式,因此它可以与NGNSv2的天鹅座一起使用吗? 谢谢你的帮助。
编辑1:
根据答案,订阅应该是这样的:对吗?
curl --include \
--header 'Content-Type: application/json' \
--request POST \
--data-binary '{
"description": "Day subscription",
"subject": {
"entities": [
{
"idPattern": "es-leon-.*",
"type": "Event"
}
],
"condition": {
"attributes": [
"Title",
"dFlag"
],
"expression": {
"q": "dFlag > 0"
}
}
},
"notification": {
"http": {
"url" : "http://localhost:5050/notify"
},
"attributes": [
"Title",
"dFlag"
],
"attrsFormat":"legacy"
}
}' \
'http://localhost:1026/v2/subscriptions'
但我仍然收到错误:
HTTP/1.1 100 Continue
HTTP/1.1 400 Bad Request
Connection: Keep-Alive
Content-Length: 67
Content-Type: application/json
Fiware-Correlator: 60a0a1d2-1ddf-11e6-8bd6-000d3a23bf27
Date: Thu, 19 May 2016 16:33:11 GMT
{"error":"BadRequest","description":"no condition attrs specified"}
答案 0 :(得分:2)
使用attrs
代替attributes
(subject.conditions
和notification
)。
此外,请注意,不再使用callback
。你必须使用:
"notification": {
"http": {
"url": "http://localhost:5050/notify"
},
..
}
此外,如果您希望通知使用NGSIv1格式,则应在attrsFormat
中包含值legacy
的{{1}}字段,如the documentation中所述。
最后请注意,严格操作网址为notification
,而不是/v2/subscriptions
,如您的示例所示。
编辑1:考虑问题中编辑1部分中的新有效负载,请注意:
您应该在/v1/subscriptions
内使用attrs
,而不是condition
(错误消息正在抱怨)
您应该在attributes
内使用attrs
,而不是notification
您应该使用attributes
(即查询字符串中没有空格)。请查看NGSIv2 specification:
例如:
"q": "dFlag>0"
编辑2: 1.2以前的猎户座版本在"expression": {
"q": "temperature>40"
}
字段之外使用attrsFormat
。因此,如果您使用的是Orion 1.1,请尝试使用notification
作为订阅有效内容JSON中的第一级字段。