eclipse-mosquitt之docker部署安装与使用

一 前言

Eclipse Mosquitto

Eclipse Mosquitto 是一个开源的 MQTT 消息代理(broker),实现了 MQTT 协议(版本 3.1、3.1.1 和 5.0)。它轻量、高效,适用于物联网(IoT)和其他需要低带宽、低延迟通信的场景。

MQTT

MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的轻量级消息传输协议,专为低带宽、不稳定的网络环境设计。它广泛应用于物联网、移动应用和嵌入式系统中。

  • 发布/订阅模式:客户端可以发布消息到特定的主题(topic),也可以订阅感兴趣的主题以接收消息。
  • 代理(Broker):负责接收发布的消息,并将其转发给订阅了相应主题的客户端。

二 Eclipse Mosquitto特点

  • 支持 MQTT 3.1、3.1.1 和 5.0 协议。
  • 轻量级,适合资源受限的设备。
  • 支持 TLS/SSL 加密通信。
  • 支持持久化消息(保留消息和持久会话)。
  • 提供命令行工具(mosquitto_pub 和 mosquitto_sub)用于测试和调试。
  • 跨平台支持(Linux、Windows、macOS 等)。

三 docker 安装Eclipse Mosquitto

1、docker下载mosquitto镜像
javascript 复制代码
docker pull eclipse-mosquitto
2、创建文件,配置目录

下载好镜像后可以通过docker images查看下拉好的镜像,确认没有问题后面就开始做运行前的准备了,为了以后方便操作我们需要把常用的文件夹挂在到磁盘中,现在磁盘中创建三个文件夹分别是config,data和log,一个是存放配置文件,可以用来修改mosquitto的端口,配置支持scoket或者匿名访问等。data用来存放数据,log用来存放日志。

复制代码
mkdir -p /usr/local/mosquitto/config
mkdir -p /usr/local/mosquitto/data
mkdir -p /usr/local/mosquitto/log

在上面创建的config文件夹中创建mosquitto的配置文件mosquitto.conf内容如下:

复制代码
persistence true
persistence_location /usr/local/mosquitto/data
log_dest file /usr/local/mosquitto/log/mosquitto.log
listener 9001
port 1883
allow_anonymous true

配置说明如下:

bash 复制代码
listener 1883:

这一行指示 Mosquitto 在端口 1883 上监听 MQTT 连接请求。这是 MQTT 协议的标准端口,客户端通常会连接到这个端口与 MQTT 代理交互。如果您没有特别指定端口,客户端默认也会尝试连接到这个端口。

persistence true:

此配置开启 Mosquitto 的持久化存储功能。当设置为 true 时,Mosquitto 会将未被客户端接收的消息保存到磁盘上。这样,即使 Mosquitto 服务重启,这些消息也不会丢失,而是会在服务恢复后继续发送给相应的订阅者。这对于确保消息可靠传输和防止消息丢失至关重要,特别是在处理重要通知、命令或状态更新等场景。

persistence_location /mosquitto/data/:

这一行定义了 Mosquitto 用于存储持久化消息的目录。此处指定的路径是 /mosquitto/data/,意味着 Mosquitto 会在容器内部(如果是 Docker 容器)或宿主机(如果是直接安装)的相应目录下创建和管理持久化数据文件。确保该目录存在且具有足够的权限供 Mosquitto 写入。

log_dest file /mosquitto/log/mosquitto.log:

这行配置指定了 Mosquitto 的日志输出目的地及文件路径。在这里,日志被定向到文件 /mosquitto/log/mosquitto.log。所有 Mosquitto 的运行日志、错误信息和其他诊断消息都将写入到这个文件中,便于管理员监控服务状态、排查问题或进行审计。
password_file /mosquitto/config/userpass.conf:

这个配置告诉 Mosquitto 使用指定的密码文件 /mosquitto/config/userpass.conf 进行用户身份验证。密码文件通常包含用户名和经过哈希处理的密码对,用于限制客户端访问。只有在密码文件中注册的用户才能成功连接到 Mosquitto,并根据其配置的权限进行发布或订阅操作。启用此配置可以增强 MQTT 服务的安全性,防止未经授权的访问。

per_listener_settings false:

此配置项指示 Mosquitto 是否为每个监听器(listener)单独应用特定的设置。当设置为 false 时,所有监听器共享相同的全局设置,如用户认证、ACL(访问控制列表)、持久化存储等。如果设置为 true,则可以为不同的监听器配置不同的认证方式、权限规则等。此处设为 false 表示所有监听器(如上面定义的 1883 端口)使用相同的认证、权限等设置。

allow_anonymous false:

这个配置禁止 Mosquitto 接受匿名(未经身份验证)的连接请求。当设置为 false 时,所有试图连接到 Mosquitto 的客户端必须提供有效的用户名和密码(通过 password_file 配置的文件进行验证),否则连接请求将被拒绝。可以防止未经授权的设备或客户端访问 MQTT 服务。

然后为创建的目录授权

复制代码
chmod -R 755 /usr/local/mosquitto
chmod -R 777 /usr/local/mosquitto/log

执行运行命令:

复制代码
docker run -it --name=mosquitto --privileged  -p 1883:1883 -p 9001:9001 -v /usr/local/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf -v /usr/local/mosquitto/config/userpass.conf:/mosquitto/config/userpass.conf  -v /usr/local/mosquitto/data:/mosquitto/data -v /usr/local/mosquitto/log:/mosquitto/log -d  eclipse-mosquitto 

运行后可以通过docker ps -a查看是否运行成功,如果是用阿里云服务器,还要记得把出入站规则添加上1883和9001端口,方便外网访问

四 MQTT安装使用

1 下载安装

mqtt在官网下载安装

java 复制代码
https://mqttx.app/?utm_source=mqttx&utm_medium=referral&utm_campaign=logo-to-homepage
2 使用

新增连接,编辑连接信息

编辑完成,点击连接,然后进行消息发送

新增个连接,来测试消息的接收,添加订阅Topic设置为test

下面就可以收到发送的消息

相关推荐
eternal__day6 分钟前
Spring Cloud 多机部署与负载均衡实战详解
java·spring boot·后端·spring cloud·负载均衡
颜淡慕潇11 分钟前
Redis 实现分布式锁:深入剖析与最佳实践(含Java实现)
java·redis·分布式
程序员秘密基地17 分钟前
基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql数据库,在线考试系统
java·vue.js·spring boot·spring·web app
何中应18 分钟前
【设计模式-5】设计模式的总结
java·后端·设计模式
吾日三省吾码36 分钟前
Spring 团队详解:AOT 缓存实践、JSpecify 空指针安全与支持策略升级
java·spring·缓存
zyjyyds11342 分钟前
win11系统 Docker Desktop 突然提示Docker Engine stopped解决情况之一
运维·docker·容器
Altairr42 分钟前
Docker基础(一)
运维·docker·容器·eureka
搬运Gong1 小时前
Dockerfile使用与最佳实践
docker·容器·虚悬镜像
风象南1 小时前
SpringBoot的5种日志输出规范策略
java·spring boot·后端
咖啡啡不加糖1 小时前
深入理解MySQL死锁:从原理、案例到解决方案
java·数据库·mysql