Ubuntu 下 MQTT 服务器搭建
- MQTT简介
- Mosquitto简介
- 安装与配置
- 正式开始前,需要......
- 下载与安装
- 试运行
- 添加和修改配置(可选)
- 测试MQTT服务器
MQTT简介
MQTT消息队列遥测传输(Message Queuing Telemetry Transport)是ISO 标准(ISO/IEC PRF 20922)下基于发布 (Publish)/订阅 (Subscribe) 范式的消息协议,可视为“资料传递的桥梁”它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件,以解决当前繁重的资料传输协议,如:HTTP。
MQTT 相较于HTTP, 能节省更多的资源,带来较多的传输负担,也因为这样,在制造业中,让更多人发现 IoT 在设备、厂房的无限可能,发现原来要取机台的温度这么容易,要了解厂区的产量这么方便…等。
Mosquitto简介
Eclipse Mosquitto是一个开源消息代理,实现了MQTT协议版本3.1和3.1.1。Mosquitto轻量,适用于低功耗单板计算机到完整服务器的所有设备。Mosquitto项目还提供了用于实现MQTT客户端的C库以及非常受欢迎的mosquitto_pub和mosquitto_sub命令行MQTT客户端。
安装与配置
正式开始前,需要…
- 一台能够正常远程登陆的服务器(这里使用阿里云9.9
乞丐学生服务器,Ubuntu 16) - 远程登录软件(例如Putty、SecureCRT,这里使用Bitvise SSH Client)
- 用于测试MQTT服务的客户端(例如Mosquitto-client,这里使用带有GUI界面的mqtt-spy)
- 一定的linux基础和对MQTT一定的理解
下载与安装
使用远程登录软件SSH登录服务器
使用远程登录软件成功登录服务器后,在console中输入以下指令,用于安装mosquitto服务
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa #添加源到软件仓库
sudo apt-get update #更新软件仓库列表
sudo apt-get install mosquitto #安装mosquitto
试运行
使用mosquitto start命令启动该服务,根据默认配置,客户端可以通过访问“tcp://域名(IP):1883”与MQTT服务器进行发布/订阅等操作:
sudo service mosquitto start #启动服务
除了mosquitto start以外,mosquitto同样支持多个指令对该服务进行检查状态与中止等操作:
sudo service mosquitto status #查看运行状态
sudo service mosquitto stop #停止服务
mosquitto -d #后台启动服务
添加和修改配置(可选)
上一步的试运行是使用默认配置的情况下运行mosquitto,如果用户需要对服务进行添加用户认证、修改默认端口或设置消息自动保存,可以在/etc/mosquitto/d.conf/路径下加入自己的配置,由于可设置的配置选项太多,详细内容可参考:mosquitto配置选项 。
新增MQTT用户的步骤如下:
sudo service mosquitto stop #首先停止服务
sudo vim /etc/mosquitto/d.conf/myconf.conf #新建并打开自己的配置文件
在新建的配置文件中,添加如下内容:
# 关闭匿名访问,客户端必须使用用户名
allow_anonymous false
#指定 用户名-密码 文件
password_file /etc/mosquitto/pwfile.txt
保存并退出后,创建一个新的mosquitto账户,并保存在pwfile.txt中:
mosquitto_passwd -c /etc/mosquitto/pwfile.txt user1 #新建用户名为user1的用户,并输入两次密码
sudo service mosquitto start #启动服务
测试MQTT服务器
- 在PC上打开mqtt-spy软件(需提前配置好JDK环境),使用快捷键Ctrl+N以新建连接(如果进行了配置MQTT用户认证,还需在Security选项卡输入用户名与密码信息)。
- 新建连接之后,对订阅及发布的主题进行设置,如下图,我们将订阅与发布的主题都设置为"test_topic"
- 最后,点击Publish按钮,可以看见在“Received Messages Summary”栏(订阅收到的消息),出现了我们刚刚发布到test_topic的内容“test_msg”。