Как сделать подписку Orion NGSIv2, которая уведомляет Cygnus в NGSIv1?
РЕДАКТИРОВАТЬ 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 подписка регистрируется нормально (спасибо за подсказки в комментариях), но у меня та же проблема, что и здесь, хотя я использую "attrsFormat":"legacy"
Я что-то не так делаю? почему orion не использует ngsiv1 для отправки уведомления cygnus?
Лебедь показывает, что Орион отвечает на это:
{
"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"
}
}]
}
Оригинальный вопрос
Как сказано в другом вопросе:
РЕДАКТИРОВАТЬ: обратите внимание также, что вы можете использовать NGSIv2 для создания / обновления сущностей в Orion и получать уведомления в NGSIv1, если вы:
Создайте подписку, используя операции NGSIv1
Создайте подписку, используя операции NGSIv2 с attrsFormat, равным legacy. Посмотрите более подробную информацию здесь.
Итак, я составил эту подписку:
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'
но orion не позволяет мне зарегистрировать это, выдав эту ошибку:
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"}
Это способ использовать устаревшие атрибуты, чтобы он мог работать с Cygnus с NGSIv2? Спасибо за помощь.
РЕДАКТИРОВАТЬ 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"}
1 ответ
Использование attrs
вместо attributes
(оба в subject.conditions
И в notification
).
Кроме того, обратите внимание, что callback
больше не используется. Вы должны использовать:
"notification": {
"http": {
"url": "http://localhost:5050/notify"
},
..
}
Кроме того, если вы хотите, чтобы уведомления использовали формат NGSIv1, вы должны включить attrsFormat
поле со значением legacy
в notification
как описано в документации.
Наконец, обратите внимание, что URL-адрес RIGT операции /v2/subscriptions
не /v1/subscriptions
как показано в вашем примере.
РЕДАКТИРОВАТЬ 1: учитывая новую полезную нагрузку в разделе РЕДАКТИРОВАТЬ 1 в вопросе, обратите внимание, что:
Вы должны использовать
attrs
внутриcondition
неattributes
(сообщение об ошибке жалуется на это)Вы должны использовать
attrs
внутриnotification
неattributes
Вы должны использовать
"q": "dFlag>0"
(т.е. без пробелов в строке запроса). Посмотрите на пример в спецификации NGSIv2:
Например:
"expression": {
"q": "temperature>40"
}
РЕДАКТИРОВАТЬ 2: версии Orion до 1.2 использования attrsFormat
вне notification
поле. Таким образом, если вы используете Orion 1.1, попробуйте использовать "attrsFormat": "legacy"
в качестве поля первого уровня в полезной нагрузке подписки JSON.