<物联网>SpringBoot后台客户端获取MQTT消息并保存到数据库(EMQ X Rule Engine规则引擎)

前言

当我们接收到了客户端/终端设备发来的信息,一般都需要作相应处理然后存到数据库,再按需在前端页面展示。当然也是可以直接通过WebSocket在前端展示的。

那么,怎么把接收到的消息保存到数据库呢?有好几种方案。

  1. 购买EMQ X Enterprise,省心省力,减少开发难度。
  2. 在java后台搭建客户端,这样可以在java后台订阅和发布报文,但在非controller层保存数据库可能会显得麻烦。
  3. 手写EMQX插件,不推荐,难而且还容易错。
  4. 规则引擎,便捷快速,是我喜欢的方案,也是本文主要介绍的方案。

在这里插入图片描述

官方文档

EMQ X Rule Engine (以下简称规则引擎) 用于配置 EMQ X 消息流与设备事件的处理、响应规则。规则引擎不仅提供了清晰、灵活的 “配置式” 的业务集成方案,简化了业务开发流程,提升用户易用性,降低业务系统与 EMQ X 的耦合度;也为 EMQ X 的私有功能定制提供了一个更优秀的基础架构。

EMQ X 在 消息发布或事件触发 时将触发规则引擎,满足触发条件的规则将执行各自的 SQL 语句筛选并处理消息和事件的上下文信息。

0.事件的上下文信息

在这里插入图片描述
先看看常用的三个事件吧,其他的可以自己去Dashboard测试。

a.消息发布

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

b.终端连接成功

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

c.终端连接断开

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.消息入库

下面就通过规则引擎+SpringBoot进行物联网 MQTT 设备在线状态记录消息存储入库

a.payload消息入库

我们最关心的大多是payload,所以先只获取payload里的内容。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
规则引擎配置完了,再写一下后台代码以便测试:

在这里插入图片描述
用Websocket测试:
在这里插入图片描述

在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述


除了payload的信息,我们还经常需要获取并记录设备/客户端的信息(包括设备ID、设备状态、时间戳等)。

在这里可按自己需要修改发送的消息数据,但注意引号的使用。不然后台收到数据就会报错了。
在这里插入图片描述
当然,也可以什么都不填,默认全部数据都发送。到时要什么就用什么,也很好。
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述

{"headers":{"username":"","protocol":"mqtt","proto_ver":4,"properties":{},"peerhost":"127.0.0.1"},"metadata":{"rule_id":"rule1"},"peerhost":"127.0.0.1","clientid":"mqttjs_b851e6fca8","flags":{"retain":false,"dup":false},"node":"emqx@127.0.0.1","qos":0,"payload":"{ \"userId\": \"121\" }","pub_props":{},"publish_received_at":1611929179404,"topic":"testtopic","id":"5BA0A82243AC3F44201001ED50027","event":"message.publish","username":"","timestamp":1611929179404}

然后可以通过JSON.toJavaObject()把jsonObject转成相应的实体类对象,再调用service、dao层的方法录入数据库。

b.在线状态记录

事件:

  • 客户端连接成功
  • 客户端连接断开

需求:

  • 获取客户端最后上线时间/下线时间
  • 获取客户端是否在线

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值