简介

MQTT是什么

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

Mosquitto是什么

Eclipse Mosquitto是一个开源消息代理,实现了MQTT协议版本5.0, 3.1.1和 3.1 。Mosquitto轻量,适用于低功耗单板计算机到完整服务器的所有设备。Mosquitto项目还提供了用于实现MQTT客户端的C库以及非常受欢迎的mosquitto_pub和mosquitto_sub命令行MQTT客户端。

docker部署

首先建立对应的目录用来存储持久化数据和配置信息

创建目录

1
2
3
4
5
mkdir -p /home/ubuntu/mosquitto/data
mkdir -p /home/ubuntu/mosquitto/config
touch /home/ubuntu/mosquitto/config/mosquitto.conf
touch /home/ubuntu/mosquitto/config/pwfile.conf
chmod -R 755 /home/ubuntu/mosquitto/

data 目录 用来保存持久化数据,如果不需要可以不建立(mosquitto配置文件去除持久化的相应设置,docker容器去除目录映射)
因为是docker部署,不需要mosquitto把日志输出到文件,直接通过 docker logs <容器名>命令即可查看

修改mosquitto配置

1
2
3
4
5
6
7
8
9
10
# 消息持久存储(如果不需要持久化可去这两条)
persistence true
persistence_location /mosquitto/data/

# 监听端口(如果不监听只能本地使用)
listener 1883
# 禁止匿名访问
allow_anonymous false
# 指定密码文件
password_file /mosquitto/config/pwfile.conf

创建密码文件

user 替换成用户名
passwd 替换成密码
如果不替换则生成了一个用户名为user,密码为passwd的账户

1
2
3
docker run --rm -it \
-v /home/ubuntu/mosquitto/config/pwfile.conf:/mosquitto/config/pwfile.conf \
eclipse-mosquitto mosquitto_passwd -b /mosquitto/config/pwfile.conf user passwd

运行镜像

1
2
3
4
docker run -it --name=mosquitto -p 1883:1883 -p 9001:9001 \
-v /home/ubuntu/mosquitto/config:/mosquitto/config \
-v /home/ubuntu/mosquitto/data:/mosquitto/data \
eclipse-mosquitto

mqtt中继

在配置文件中增加
addr代表要中继的mqtt服务地址
mqtt-bridge是名字,可以任意起
topic stat/# both stat/#为要中继的主题,如果需要中继全部就写#

1
2
3
4
5
6
connection mqtt-bridge
address addr:1883
topic stat/# both
topic cmnd/# both
remote_username user
remote_password passwd