MQTT服务器搭建

  早期时候,我参与的项目使用自己编写的udp转发服务器进行短指令的传输,但这只是一种暂时的方法用于解决通讯传输问题,实际使用中并不够规范。因此,我们计划使用MQTT协议进行短指令的传输,这样通过划分topic实现对多种消息或者指令的传输。
  经过查看多种教程,我找到了两种不同的方法,整理如下:

基于Mosquitto的MQTT服务器搭建

  Mosquitto是一个开源的消息代理服务项目,该项目实现了5.0、3.1.1和3.1版本的MQTT协议。Mosquitto作为一款轻量级的消息服务器,适用于所有的设备,从低功耗的单片机到完整的服务器都可以很方便的使用。
  MQTT协议提供了一种基于发布-订阅模式的轻量级消息传递机制。这使得他适用于物联网设备,比如低功耗的传感器或者手机等移动设备。
  Mosquitto项目提供了一个用于实现MQTT客户端的C库,并且提供了广受欢迎的mosquitto_pub和mosquitto_sub客户端程序。

安装Mosquitto

  • 更新软件包
      更新apt的软件包:

    sudo apt-get update
  • 安装Mosquitto
      使用apt-get安装Mosquitto服务:

    sudo apt-get install mosquitto
  • 安装Mosquitto的客户端
      安装Mosquitto的客户端以后,可以使用mosquitto_pub和mosquitto_sub测试MQTT服务器是否正常。

    sudo apt-get install mosquitto-clients

Mosquitto的配置与启动

  Mosquitto会使用/etc/mosquitto/mosquitto.conf作为默认的配置文件,打开文件可以看到以下内容:

# 可以把自己本地的配置文件放在/etc/mosquitto/conf.d/文件夹下
# 对于配置文件来说,详细的配置项描述在/usr/share/doc/mosquitto/examples/mosquitto.conf.example文件中
# Place your local configuration in /etc/mosquitto/conf.d/
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d

  为了简单起见,可以直接修改默认的配置文件mosquitto.conf或者自己创建自己的配置文件,然后使用mosquitto的命令指定配置文件启动服务。
  1.使用默认配置文件
  因为暂时用于测试,所以我没有添加认证,允许所以的匿名访问,使用默认的端口,配置文件如下所示:

allow_anonymous ture

  直接启动mosquitto服务:

sudo service mosquitto start

  启动后,可以使用以下命令查看mosquitto的运行状态:

sudo service mosquitto status

  如果运行正常,会有以下显示:

● mosquitto.service - Mosquitto MQTT v3.1/v3.1.1 Broker
     Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor pr>
     Active: active (running) since Sun 2022-07-31 16:48:51 CST; 20min ago
       Docs: man:mosquitto.conf(5)
             man:mosquitto(8)
   Main PID: 3712 (mosquitto)
      Tasks: 3 (limit: 4588)
     Memory: 1.2M
     CGroup: /system.slice/mosquitto.service
             └─3712 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

7月 31 16:48:51 Ubuntu systemd[1]: Starting Mosquitto MQTT v3.1/v3.1.1 Broker.>
7月 31 16:48:51 Ubuntu mosquitto[3712]: [ 1703.864669]~DLT~ 3712~INFO     ~FIF>
7月 31 16:48:51 Ubuntu systemd[1]: Started Mosquitto MQTT v3.1/v3.1.1 Broker.

  可以看到其中的active显示mosquitto服务处于runing状态。
  2.可以编写自己的配置文件
  在自己的配置文件中,可以根据配置文件的示例模板添加相应的配置项,比如:认证配置、权限配置等。使用以下命令启动mosquitto服务:

# -c用于指定配置文件
# -d表示后台运行
mosquitto -c 配置文件 -d

Mosquitto的测试

  最直接的方式便是使用mosquitto的pub和sub客户端进行测试,命令参数可以通过mosquitto_pub --help进行查看。开启一个sub客户端指定一个话题(这里使用/topic/test)启动订阅,然后再使用另一个pub客户端指定同一话题发布一条消息,如下所示:
  话题订阅者:

# 可以通过-h指定主机地址(默认是localhost)
# 可以通过-p指定端口(默认是1883)
# 可以通过-t指定话题
mosquitto_sub -t /topic/test

  话题订阅者:

mosquitto_pub -t /topic/test -m "hello mqtt"

  效果如下所示:

基于EMQX的MQTT服务器搭建

  EMQX 是一款大规模可弹性伸缩的云原生分布式物联网 MQTT 消息服务器。作为全球最具扩展性的 MQTT 消息服务器,EMQX 提供了高效可靠海量物联网设备连接,能够高性能实时移动与处理消息和事件流数据,帮助您快速构建关键业务的物联网平台与应用。
  EMQX的优势:
  开放源码:基于 Apache 2.0 许可证完全开源,自 2013 年起 200+ 开源版本迭代。
  MQTT 5.0:100% 支持 MQTT 5.0 和 3.x 协议标准,更好的伸缩性、安全性和可靠性。
  海量连接:单节点支持 500 万 MQTT 设备连接,集群可扩展至1亿并发 MQTT 连接。
  高性能:单节点支持每秒实时接收、移动、处理与分发数百万条的 MQTT 消息。
  低时延:基于 OTP 软实时的运行时系统设计,消息分发与投递时延低于 1 毫秒。
  高可用:采用 Masterless 的大规模分布式集群架构,实现系统高可用和水平扩展。
  最棒的是:EMQX提供了官方文档

EMQX的安装

  EMQX支持多种安装方式,包括二进制安装包以及docker安装,这里只介绍使用deb包进行安装的方法。
  1.下载deb包
  在官方提供的地址下载安装包,可以根据自己的系统选择对应的安装包进行安装。
  2.安装EMQX
  官方给出了详细的安装指南,这里以ubuntu20.04为例:
  
  3.启动EMQX
  官方给出的安装方式中提供了具体的命令来启动EMQX。如果启动成功,可以在终端中看到以下结果:

EMQX 5.0.4 is started successfully!

DashBoard的启动

  EMQX提供了面板支持,这为配置MQTT服务器的相关项提供了极大的方便,DashBoard面板的默认端口是18083,访问服务器的该端口就可以打开面板(默认用户名admin,默认密码public):

服务器的测试

  如果已经安装过了mosquitto的pub和sub客户端,可以使用之前介绍的方法进行测试,效果与之前的描述一致。

部署在具有公网IP的服务器上

  如果要在具有公网IP地址的服务器上进行部署,请注意开放相应的端口:mqtt默认端口1883,EMQX的面板端口18083
  如果你的服务器上安装了宝塔面板,除了在云主机的运营商控制台开放端口以外记得在宝塔面板中也要放行对应的端口。


当珍惜每一片时光~