MQTT Broker 的开源实现 EMQX

更新日期: 2022-07-12 阅读次数: 3542 字数: 848 分类: 物联网

想使用 EMQX 的根本原因是,蓝牙网关上报数据推荐使用 MQTT 协议。 而这个消息量巨大,我担心扛不住腾讯云的费用。

使用 MQTT 协议的优势

  • MQTT 协议自带了账号密码验证机制,以及主题订阅权限
  • 蓝牙网关默认支持 MQTT 协议
  • TCP 需要自己处理数据粘包问题,而 MQTT 则不需要
  • UDP 无法保证数据到达的顺序,对于时序数据来说,比较致命。而终端的时间戳我觉得不太可靠

但是首先,我还是想把 EMQX 的文档过一遍。之前虽然在一个项目中用过 MQTT, 可那是基于腾讯云 MQTT 实现的,担心很多概念并不清晰,还是需要看一遍文档。

EMQX 5.0 的文档地址

https://www.emqx.io/docs/zh/v5.0/

左下角可以下拉切换文档版本。

MQTT 支持 4 种传输协议

  • TCP
  • TLS
  • WebSocket
  • QUIC(实验性)

可靠性

  • 过载保护
  • 消息速率限制。这个对我来说还是有价值的,因为很多蓝牙设备的上报数据频率过高,例如体征波形数据能达到 400 次/秒。需要限制频率
  • 连接速率限制

硬件要求

最小需 2 核 4G

在线调试

打开 Dashboard,进入 问题分析 -> WebSocket 客户端 页面中可以在浏览器中使用 MQTT over WebSokcet 客户端快速接入 EMQX。 WebSocket 客户端页面为您提供了一个简易但有效的 MQTT 测试工具,它包含了连接、订阅和发布功能,同时还能查看自己发送和接收的消息数据。

Go SDK

https://www.emqx.io/docs/zh/v5.0/development/go.html

使用的代码示例:

https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-Go

go client 使用账号密码发布消息的示例

认证与授权的区别

  • 启用身份认证(Authentication)能有效阻止非法客户端的连接。
  • 授权(Authorization)可以对客户端发布/订阅操作进行精细的权限控制。

TODO

  • systemd 配置文件
  • 修改 dashboard 的登录密码
  • 设置系统及服务最大文件句柄数: https://www.emqx.io/docs/zh/v5.0/deploy/tune.html
  • 选择哪个版本
  • 企业版与开源版的区别
  • 生产环境运行时,对 CPU 内存,磁盘的占用情况

下载并安装

https://www.emqx.com/zh/try?product=broker

wget https://www.emqx.com/zh/downloads/broker/5.0.0/emqx-5.0.0-otp24.2.1-1-ubuntu20.04-amd64.tar.gz

如果遇到 1883 端口被占用的情况,排查方式参考

Dashboard 管理后台

浏览器访问:

http://localhost:18083

默认用户名是 admin,密码是 public

https://www.emqx.io/docs/zh/v4.4/getting-started/dashboard.html

如何将 Dashboard 切换为中文界面

Dashboard 中,最后一个配置项,系统设置中切换即可。

MQTT 相对 HTTP 的优势

低带宽、低功耗。MQTT 在传输报文的大小上与 HTTP 相比有巨大的优势,因为 MQTT 协议在连接建立之后,由于避免了建立连接所需要的额外的资源消耗,发送实际数据的时候报文传输所需带宽与 HTTP 相比有很大的优势,参考网上有人做的测评 (opens new window),发送一样大小的数据,MQTT 比 HTTP 少近 50 倍的网络传输数据,而且速度快了将近 20 倍。在网上有人做的另外一个评测显示 (opens new window),接收消息的场景,MQTT 协议的耗电量为 HTTP 协议的百分之一,而发送数据的时候 MQTT 协议的耗电量为 HTTP 协议的十分之一;

参考

  • EMQX 5.0 新功能介绍:https://www.emqx.com/zh/blog/emqx-v-5-0-preview

微信关注我哦 👍

大象工具微信公众号

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式

tags: MQTT