1.MQTT server的选择 — Mosquitto MQTT
Docker-Compose搭建Mosquitto MQTT环境
version: "3"
services:
mosquitto:
container_name: mosquitto
image: eclipse-mosquitto:1.5
ports:
- "1883:1883"
- "9001:9001"
volumes:
- /mosquitto/config:/mosquitto/config
- /mosquitto/data:/mosquitto/data
- /mosquitto/log:/mosquitto/log
在创建容器之前先整个配置文件,写点东西
创建宿主机挂载目录
直接挂载整个目录,最大的优势就是创建一些配置文件就不需要频繁进入容器内去整活了,可以直接在宿主机挂载目录进行操作`
mkdir -p /mosquitto/config //存放配置文件、密码文件以及权限配置文件
mkdir -p /mosquitto/data //存放数据目录,存了个寂寞,啥也没有
mkdir -p /mosquitto/log //mosquitto运行过程中的日志
整个配置文件
touch /mosquitto/config/mosquitto.conf
persistence true
persistence_location /mosquitto/data
log_dest file /mosquitto/log/mosquitto.log
ps:这段配置是个啥我也不知道,可能是数据以及日志持久化的配置,经过使用日志还是需要的,docker logs命令并不能把mosquitto的日志信息给打印出来
创建容器
docker-compose -f 配置文件路径 up -d
ps:默认是允许客户端进行匿名访问的,并且对topic的读写权限也并没有任何限制
1.1 配置用户名密码连接MQTT Server
mosquitto.conf配置文件修改
#关闭允许匿名访问
allow_anonymous false
#指定密码配置文件
password_file /mosquitto/config/pwfile.conf
进入mosquitto容器内
ps:这边有坑,命令行并不是bash
docker exec -it mosquitto /bin/sh
#创建密码文件pwfile.conf
touch /mosquitto/config/pwfile.conf
创建用户
mosquitto_passwd -b /mosquitto/config/pwfile.conf 用户名 密码
1.2 给用户分配topic的读写权限
配置文件增加配置
acl_file /mosquitto/config/acl
在宿主机目录(挂载)创建acl文件
topic read $SYS/#
# This only affects clients with username "roger".
#user roger
#topic foo/bar
user xwj
topic write /test/+
# This affects all clients.
#pattern write $SYS/broker/connection/%c/state
#user xwj
#topic read /test/+
PS:上述配置文件配置了xwj用户对/test/+只拥有写权限,没有读权限,在一定程度上保证了topic的安全性
2.SpringBoot框架集成MQTT
MQTT相关依赖
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>