fiware - FIWARE Orion,NGSIv2 订阅具有结构化值的属性
问题描述
我正在使用 Orion Contex Broker,当结构化属性中的参数更改其值时,我需要接收通知。一个例子:
- 订阅:
curl -iX POST \
--url 'http://localhost:1026/v2/subscriptions' \
--header 'content-type: application/json' \
--data '{
"description":"Notify me of Store changes in street Address",
"subject":{
"entities":[
{
"idPattern":".*",
"type":"Store"
}
],
"condition":{
"attrs":[
"address.streetAddress"
]
}
},
"notification":{
"http":{
"url":"http://localhost:3000/subscription/store-change"
}
}
}'
- 创建实体:
curl -iX POST \
--url 'http://localhost:1026/v2/op/update' \
-H 'Content-Type: application/json' \
-d '{
"actionType":"append",
"entities":[
{
"type":"Store",
"id":"urn:ngsi-ld:Store:001",
"address":{
"type":"PostalAddress",
"value":{
"streetAddress":"Old",
"addressRegion":"Berlin"
}
},
"name":{
"type":"Text",
"value":"Bösebrücke Einkauf"
}
}
]
}'
- 更新实体:
curl -iX PATCH \
--url 'http://localhost:1026/v2/entities/urn:ngsi-ld:Store:001/attrs' \
-H 'Content-Type: application/json' \
-d '{
"address":{
"type":"PostalAddress",
"value":{
"streetAddress":"Bornholmer"
}
}
}'
预期结果将是在创建和更新实体时收到通知。另一种可能性可能是“条件表达式”。然而,一种:"q": "address.streetAddress!=${previousValue}"
尚未实施。
解决方案
NGSI 中的属性通常是数字或字符串——这通常会导致非常扁平的数据模型。在这种情况下,当属性值更改时,订阅将被触发。
address
也支持JSON 对象(例如上面的),但是只要对象发生value
更改并且没有专门绑定到子属性,就会发生更改因此
"attrs":[
"address.streetAddress"
]
需要是:
"attrs":[
"address"
]
但是,该q
参数可用于过滤特定的子属性,例如q=address.streetAddress!="Old"
- 监听接口可以在订阅触发后修改订阅。
推荐阅读
- javascript - 使用 jQuery 将表单数据抓取到对象中以生成任意数组和对象的值
- javascript - Angular 9:使用带有条件的外部 js 脚本
- regex - 域重定向但需要排除子目录 .htaccess
- google-cloud-platform - Terraform 应用无法保存状态:HTTP 错误:Google Cloud Platform 上的 308
- html - 某些导航器上的 Angular 和 Flexbox 问题
- nginx - Kubernetes - Ingress - Nginx:将查询参数从原始请求转发到 auth-url
- excel-formula - 在 Excel for Office 365 中将 70° F 更改为 70
- uber-api - 是否可以使用 uber api 来识别驱动程序?
- amazon-web-services - 需要运行需要超过 15 分钟才能完成的 aws lambda 函数?
- javascript - Google BigQuery 错误:语法错误:非法输入字符“%”