emqx-mqtt 配合 golang-gin 如何做认证和他们之间如何做业务处理?
通信示意图↓↓↓
http://img.g-t.ink/8ecd675f1714a10529b61249.png

Q1: emqx 中的认证和 http 认证是否可以使用同一个 JWT-token?
Q2: emqx 中如何对指定的设备端发送指令?
Q3: emqx 接收到消息(指令)需要进行业务处理、如何给其他应用(golang-gin 或 laravel 或 springboot)处理?
通信示意图↓↓↓
http://img.g-t.ink/8ecd675f1714a10529b61249.png

Q1: emqx 中的认证和 http 认证是否可以使用同一个 JWT-token?
Q2: emqx 中如何对指定的设备端发送指令?
Q3: emqx 接收到消息(指令)需要进行业务处理、如何给其他应用(golang-gin 或 laravel 或 springboot)处理?
A1: 可以, 先通过 http 验证用户通过返回 token 给客户端、建立 mqtt 连接时发送 token 给 emqx 、emqx 通过 webhook 给回 http 服务器验证是否通过最后 emqx 对返回结果决定是否建立连接.
A2: 每个设备端都建立一个唯一的主题(topic)
A3: 通过 webHook 触发(然后对订阅的主题在发送消息)
Q1: emqx 中的认证和 http 认证是否可以使用同一个 JWT-token?
— 可以配置 JWT 插件进行鉴权,应该是可以共用,我是通过 MySQL 进行鉴权,没试过 JWT 。
Q2: emqx 中如何对指定的设备端发送指令?
— 设计一个包含设备唯一 ID 的 topic,往这个 topic 发送。
Q3: emqx 接收到消息(指令)需要进行业务处理、如何给其他应用(golang-gin 或 laravel 或 springboot)处理?
— 其他应用作为 mqttClient 去订阅 需要进行业务处理的 topic,设备发布消息后其他有订阅的应用就可以收到消息进行处理啦。
https://docs.emqx.cn/broker/v4.2/advanced/auth-http.html#%E8%AE%A4%E8%AF%81%E8%AF%B7%E6%B1%82
Q2 和 Q3: 都是发布订阅的相关问题,可以了解一下 MQTT 的 Topic 机制,主要是那些通配符的语法,自己制定一个比较好用的 Topic 的方式
A2: 一般设备收到 CONNECT ACK 指令后,紧接着会发送 SUBCRIBE 报文,这个报文就包含了设备端订阅的主题,对于 emqx 而言,提供了 HTTP 接口可以向指定的设备发送指令,具体可参考 API 文档
A3: 可以用 webhook,对于大规模设备而言并不合适,HTTP 调用太过耗时。可以使用消息队列桥接插件,不过 emqx 只有企业版才会提供,插件开源项目也有,稳定性有待考证
Q2 和 Q3 是对 mqtt 不了解,其实可以多看看文档就可以解决的问题
设备的认证参考 8 说的用阿里云的方式,可以先了解下设备三元组。