TR50 命令聚合器
物和 TR50 类别的触发器动作将生成发送到 物联网设备管理门户 的 TR50 命令。启用 TR50 命令聚合器后,TR50 命令将在发送之前排队等待一段时间。这允许将多个 TR50 命令组合在一起,并作为一个消息包发送到 物联网设备管理门户。这种分组减少了消息传递开销。
满足选定的 Command Aggregator Interval (sec)(命令聚合器间隔(秒)时,将 TR50 命令放入队列,然后一起发送。此时间间隔是从第一个 TR50 命令添加到 TR50 命令聚合器队列开始计算的。时间间隔的范围是 1 到 300 秒。
TR50 命令聚合器的消息大小限制为 20,000 字节。如果队列中的 TR50 命令导致分组的消息大于此大小限制,则将创建多条消息 - 每一条都遵循大小限制。
TR50 命令聚合器还支持批处理。如果用于触发器动作的 TR50 命令具有相应的批处理命令,则单个 TR50 命令将转换为使用单个批处理命令。例如,通常使用 property.publish TR50 命令将 Publish Property(发布测量值)动作发送到 物联网设备管理门户。如果启用了 TR50 命令聚合器,则可以将多个 property.publish TR50 命令转换为单个 property.batch TR50 命令。
支持命令聚合的当前物动作
下表显示了触发器动作、用于将信息发送到 物联网设备管理门户 的 TR50 命令以及相应的 TR50 批处理命令(如果支持)之间的关系。
触发器动作 | TR50 命令 | TR50 批处理命令 |
---|---|---|
添加物标签 | thing.tag.add | 不支持 |
绑定物 | thing.bind | 不支持 |
删除物标签 | thing.tag.delete | 不支持 |
发布告警 | alarm.publish | alarm.batch |
发布位置 | location.publish | location.batch |
发布日志 | log.publish | 不支持 |
发布测量值 | property.publish | property.batch |
设置物静态属性 | thing.attr.set | 不支持 |
解除物绑定 | thing.unbind | 不支持 |
取消设置物静态属性 | thing.attr.unset | 不支持 |
命令聚合
以下示例显示了触发器动作如何生成发送到 物联网设备管理门户 的 TR50 命令和消息包。
示例 1:将 Command Aggregator(命令聚合器)参数设置为 False 的发布告警动作。Alarm.publish 命令将立即发送到 物联网设备管理门户。
{
"1": {
"command": "alarm.publish",
"params": {
"key": "thing_1",
"state": 4,
"ts": "2015-12-08T15:08:41Z"
}
}
示例 2:执行将 Command Aggregator(命令聚合器)参数设置为 True 的发布日志动作,并在 TR50 Advanced Connection Management(TR50 高级连接管理)选项卡上启用 TR50 命令聚合器。
Log.publish 命令不会立即发送,而是会添加到 TR50 命令聚合器队列中,在该队列中它将等待命令聚合器间隔(秒)到期。
由于在命令聚合器间隔(秒)内执行了其他支持 TR50 命令聚合的动作,它们将被添加到 TR50 命令聚合器队列中。
在本例中,这些动作是发布日志动作、添加物标签动作,以及再一次的发布日志动作。
{
"1": {
"command": "log.publish",
"params": {
"msg": "log message",
"ts": "2016-06-22T17:47:08Z"
}
},
"2": {
"command": "thing.tag.add",
"params": {
"tags": [
"tag1",
"tag2"
],
"thingKey": "test"
}
},
"3": {
"command": "log.publish",
"params": {
"msg": "log message again",
"ts": "2016-06-22T17:47:08Z"
}
}
}
当命令聚合器间隔(秒)到期后,这三个命令会分组并作为一个消息包以上述格式发送到 物联网设备管理门户。
请注意,这三个触发器动作不必位于同一触发器中。TR50 命令聚合器及其用于保存 TR50 命令的队列适用于 TR50 连接。
示例 3:如果未启用 TR50 命令聚合,则在执行触发器动作时,将分别发送单个命令到 物联网设备管理门户。
物联网设备管理门户 将以下列格式接收它们:
第 1 个包:
{
"1": {
"command": "log.publish",
"params": {
"msg": "log message",
"ts": "2016-06-22T17:47:08Z"
}
}
}
第 2 个包:
{
"1": {
"command": "thing.tag.add",
"params": {
"tags": [
"tag1",
"tag2"
],
"thingKey": "test"
}
}
}
第 3 个包:
{
"1": {
"command": "log.publish",
"params": {
"msg": "log message again",
"ts": "2016-06-22T17:47:08Z"
}
}
}
命令聚合器大小限制
TR50 命令聚合器的消息最大大小限制为 20,000 字节。如果队列中的 TR50 命令导致分组的消息大于此大小限制,则将创建多条消息 - 每一条都遵循大小限制。
示例 4:如果大小限制为 400 字节,则从上面的示例 3 开始,发布日志动作以及随后的添加物标签动作将生成 358 字节大小的消息包。
当再次执行发布日志动作时,三个 TR50 命令的消息包总大小将为 521 字节,超过 400 字节的示例消息大小限制。当命令聚合器间隔(秒)到期时,TR50 命令聚合器将最终发送两个消息包。
第 1 个包:
{
"1": {
"command": "log.publish",
"params": {
"msg": "log message",
"ts": "2016-06-22T17:47:08Z"
}
},
"2": {
"command": "thing.tag.add",
"params": {
"tags": [
"tag1",
"tag2"
],
"thingKey": "test"
}
}
}
第 2 个包:
{
"1": {
"command": "log.publish",
"params": {
"msg": "log message again",
"ts": "2016-06-22T17:47:08Z"
}
}
}
批处理
启用 TR50 命令聚合器后,TR50 命令将自动使用其相应的 TR50 批处理命令。与简单的命令聚合相比,将数据作为批处理命令发送可进一步减少消息传递的开销。
批处理 TR50 命令时,它将自动按时间戳顺序进行分组,并按物键值进行分组。当项键值存在时,命令也将基于该键值进行分组。例如,测量值发布中的项键值是测量值键值,而告警发布中的项键值是告警键值。
示例 5:多个发布测量值动作不会分组为单个 property.publish 命令,而是会转换为单个 property.batch 命令。具体来说,property.batch 命令将按物键值针对不同的测量值键值和值进行批处理(或分组)。
{
"1": {
"command": "property.batch",
"params": {
"data": [
{
"corrId": "1",
"key": "key1",
"ts": "2008-03-18T10:00:00Z",
"value": 335.17
},
{
"corrId": "1",
"key": "key2",
"ts": "2008-03-18T10:00:00Z",
"value": 135.17
}
],
"thingKey": "thing"
}
}
}
如果对同一个测量值键值执行了多个发布测量值动作,则 property.batch 命令将按物键值和测量值键值针对不同的值进行批处理(或分组)。
{
"1": {
"command": "property.batch",
"params": {
"data": [
{
"corrId": "1",
"ts": "2008-03-18T10:00:00Z",
"value": 335.17
},
{
"corrId": "1",
"ts": "2008-03-18T10:00:00Z",
"value": 135.17
}
],
"thingKey": "thing"
"key": "key2",
}
}
}
TR50 命令聚合器错误处理
将 TR50 命令发送到 物联网设备管理门户 后,物联网设备管理门户 将为每个 TR50 命令发送回复。如果回复返回命令错误,则将写入异常日志条目,指示失败的项目、触发器和动作,以及失败的错误代码和错误消息。也可以在 物联网设备管理门户 的API 日志中查看此失败。
如果消息包中包含批处理命令,则将写入“异常日志”条目,指示失败的项目、触发器和动作,以及分组到批处理命令的每个 TR50 命令的失败错误代码和错误消息。但是,物联网设备管理门户 将报告整个批处理命令包失败,并且仅处理批处理命令包失败之前的数据,因此只有一部分批处理数据会被处理。也可以在 物联网设备管理门户 的API 日志中查看此失败。
示例 6:将 property.batch 发送到 物联网设备管理门户(请参见下文)。
{
"1": {
"command": "property.batch",
"params": {
"data": [
{
"corrId": "1",
"ts": "2008-03-18T10:00:00Z",
"value": 335.17,
"key": "processed"
},
{
"corrId": "1",
"ts": "2008-03-18T10:00:00Z",
"value": 135.17,
"key": "invalid.key"
},
{
"corrId": "1",
"ts": "2008-03-18T10:00:00Z",
"value": 135.17,
"key": "failed_to_process"
},
{
"corrId": "1",
"ts": "2008-03-18T10:00:00Z",
"value": 135.17,
"key": "failed_to_process"
}
],
"thingKey": "thing"
}
}
}
整个批处理将失败,并显示错误消息:“Invalid key format for 'invalid.key':Key must only contain letters, numbers, '_' (underscore), and '-' (hyphen).”(“invalid.key”的键值格式无效:键值只能包含字母、数字、“_”(下划线)和“-”(连字符))。
但是,第一个键值将被处理。第二个键值将导致失败,而其余的批处理命令将不处理。