使用自定义函数实现数据编解码、格式处理与业务告警

简介: MQTT消息云服务EMQX Cloud推出自定义函数新功能,为物联网数据格式统一化提供更灵活的处理方式,帮助提升开发效率。

背景

在物联网平台的设备数据接入场景中,开发者总是希望平台接入的设备数据格式标准统一,以便对数据进行统一处理。在实际情况中,由于业务需要,平台常常会面对不同类型、不同厂商的设备接入。即使设备接入协议已经统一使用 MQTT ,由于 MQTT 协议中对 Payload 格式的宽松定义,应用开发者往往还需要针对不同设备上报格式进行加工处理。尤其在已经出厂的存量设备或是已经部署到现场的设备对接过程中,平台开发者往往无法要求设备侧按照平台的统一标准进行数据上报。因此,平台侧对于设备数据的统一化处理就成为开发过程中的一项重要工作。

设备数据处理常用方法对比

使用全托管 MQTT 消息云服务 EMQX Cloud 进行设备数据接入的过程中,解决数据格式统一化通常有以下几种方案。

数据透传

通过 EMQX Cloud 接入数据后将报文透传到应用侧,在后台业务应用中对各类型数据进行格式转换与处理。这种方式相对最为直接,但对应用开发者最不友好。尤其在数据吞吐量比较大的情况下,后台业务应用既要处理数据格式,又要完成业务处理,对业务端性能也会影响比较大。

通过规则引擎进行数据处理

EMQX Cloud 内置的数据集成规则引擎提供了基于 SQL 语言的规则定义与数据处理能力。开发者可以通过内置函数对数据格式和内容进行处理。这种低代码数据处理方式将数据格式与内容处理前置到消息中间件层,为后台业务应用开发提供了高性能、标准化的数据处理方式。但是受限于规则引擎的内置函数与方法,用户无法实现逻辑相对复杂的数据处理需求,且规则引擎也不支持比较复杂的逻辑判断。

优化方案:自定义函数

为了增强规则引擎数据处理能力,EMQX Cloud 推出了「自定义函数」增值服务。

用户可以通过编写基于 ECMAScript 5.1 及部分 ECMAScript 6 的语法的自定义脚本实现数据处理逻辑,并在 EMQX Cloud 规则引擎中调用,这样就可以完成更加复杂的数据预处理逻辑,并通过规则引擎将函数返回的数据按业务需求流转至消息消费方。

考虑到执行性能对整体消息吞吐性能的影响,EMQX Cloud 提供的自定义函数会对执行脚本进行性能检查,脚本执行时间 不能超过 3 秒,否则将无法通过验证。因此我们不建议在脚本中编写高耗时的操作。

在实际场景中使用自定义函数

下面我们通过几个例子来看看自定义函数可以用于哪些业务场景。

数据编解码

在设备数据上报场景中,对于网络带宽受限以及功耗敏感的设备,在数据传输过程中往往会将设备数据通过更加紧凑的十六进制格式进行传输,以便节省带宽和功耗。在平台侧,如果业务应用需要理解上报数据的具体业务意义,则需根据规约将十六进制报文解析成 JSON 格式报文,方便应用开发。

示例

平台需要接入一个智能井盖设备,井盖设备需要定时上传 4 个传感器数据,设备通过十六进制数格式上报到平台,每两个字节代表一个传感器数据:

表格1.png

我们通过自定义函数将十六进制数转换为有意义的 JSON 格式,方便后台业务应用对数据进行消费。我们在 EMQX Cloud 中创建一个自定义函数:

在 EMQX Cloud 中创建一个自定义函数 图2.png

假如此时设备上报数据为 00011601,Payload 作为入参进入自定义函数输入为 { 0x00, 0x01, 0x16, 0x01};我们以此输入测试函数输出,可以看到结果如下:

自定义函数输出 图3.png

这样我们就可以通过自定义函数,将设备上报的编码数据格式转化为更为易处理的 JSON 格式供后端业务应用消费。

数据格式处理

在设备数据上报过程中,数据上传通常会以比较简单的格式进行传输,比如会按默认规定省略一些默认的数据与格式。但对于平台侧应用来说,一般需要能够通过数据处理补齐相关的数据以达成数据格式的标准化。此时我们可以通过自定义函数来实现数据格式补齐。

示例

我们在办公楼的机房内部署了温湿度传感器以用来检测环境数据,传感器通过 MQTT 协议以 JSON 格式的Payload 上报报文到云端平台。数据报文格式如下:

{
  "hum" : 20.0,
  "temp" : 36.5
}

我们希望通过自定义函数对每个上报报文进行单位的补齐,这时可以通过定义如下函数来实现:

通过自定义函数对每个上报报文进行单位的补齐 图4.png

通过函数测试我们可以看到,输出的数据被添加了相应的单位格式:

自定义函数输出 图5.png

这样,我们就完成了对上报报文的格式转换工作。

数据告警

除了通过函数处理报文格式外,我们也可以通过逻辑判断实现业务告警。虽然 EMQX 提供的规则引擎也可以进行简单的数值判断,但是相对复杂的逻辑判断与数据处理更适合在自定义函数中进行。

示例

沿用上一个场景的设备数据,我们可以通过判断温度与湿度是否在正常工作状态来设置告警信息。比如机房的正常工作温度在 15 到 40 摄氏度之间,湿度在 30% 到 60% 之间。我们就可以通过在自定义函数中进行判断后,对超过工作温湿度的上报数据进行告警处理。

自定义函数设置数据告警 图6.png

如果我们从传感器上报的实时湿度超过工作范围,我们将得到告警信息。

自定义函数输出告警信息 图7.png

这样,后台应用就可以通过输出的 Warning 信息来进行业务告警处理。

另外在 EMQX Cloud 规则引擎中调用自定义函数可以支持多个入参,比如 Topic、ClinetID 等。用户可以结合各种设备与主题信息进行对报文的加工与处理,在此不一一赘述。

结语

物联网设备接入的业务场景纷繁复杂,EMQX Cloud 提供的自定义函数功能为广大物联网开发者提供了更加灵活的数据处理方式。用户可以在自定义函数中实现相对复杂的数据处理逻辑,通过 EMQX Cloud 服务快速部署函数与设备数据和应用对接,大大提升开发效率。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/data-codec-using-custom-functions

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 存储 运维
Zabbix与ELK整合实现对安全日志数据的实时监控告警
Zabbix与ELK整合实现对安全日志数据的实时监控告警
Zabbix与ELK整合实现对安全日志数据的实时监控告警
|
11月前
|
消息中间件 测试技术
通过轻量消息队列(原MNS)主题HTTP订阅+ARMS实现自定义数据多渠道告警
轻量消息队列(原MNS)以其简单队列模型、轻量化协议及按量后付费模式,成为阿里云产品间消息传输首选。本文通过创建主题、订阅、配置告警集成等步骤,展示了该产品在实际应用中的部分功能,确保消息的可靠传输。
229 2
|
数据采集 弹性计算 监控
为什么云监控、云产品流量监控中的流量数据和DDoS防护的流量监控数据有差异?
为什么云监控、云产品流量监控中的流量数据和DDoS防护的流量监控数据有差异?
为什么云监控、云产品流量监控中的流量数据和DDoS防护的流量监控数据有差异?
|
监控 物联网 机器人
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
|
监控
135 日志监控告警系统案例(数据模型设计)
135 日志监控告警系统案例(数据模型设计)
355 0
|
存储 数据采集 监控
无数据告警最佳实践
在对SLS的Logstore和Metricstore进行监控的过程中,有时候会出现一些无数据的情况,监控SLS的存储库中无数据的情况,是保证数据成功上传到SLS的一个重要手段,本文将介绍无数据告警的常见配置方法。
627 0
无数据告警最佳实践
|
弹性计算 Prometheus 运维
【数据可观测】阿里云的Grafana云监控大盘服务
阿里云发布的grafana托管服务,更是为云上的资产提供了高效的监控数据可观测能力。阿里云grafana弹性、免运维,可以方便的对接云上云下的各种数据源。
2663 1
【数据可观测】阿里云的Grafana云监控大盘服务
|
存储 数据采集 监控
【最佳实践】无数据告警配置
背景在对SLS的Logstore和Metricstore进行监控的过程中,有时候会出现一些无数据的情况,例如数据采集阶段出现故障Logtail采集异常、数据导入任务异常或者SDK写入数据出错等情况都有可能导致日志库中没有数据。业务系统出现问题例如用户的业务日志中有某个系统模块的日志,在一段时间内,由...
431 0
【最佳实践】无数据告警配置
|
监控 Kubernetes 容器
云监控报警最佳实践之无数据策略
本文介绍了云监控报警中的无数据策略,通过该策略用户可以实现被监控对象无数据时的响应、处理。 ## 背景 云监控报警通常情况下是通过监控数据的阈值的判断来进行报警,比如cpu超过80%报警等。但有时候被监控对象的监控数据出现不连续或断掉的情况。如果要对这种情况进行报警,就需要配置无数据策略。 ## 配置无数据策略 首先进入[云监控控制台](https://cloudmonitor.console.
778 2
云监控报警最佳实践之无数据策略
|
监控 算法
云监控中通过HTTP上报事件监控数据
云监控中通过HTTP上报事件监控数据
339 0
云监控中通过HTTP上报事件监控数据