通过Docker Compose安装MQTT
一、文件和目录说明
1、MQTT安装时的文件和目录
EMQX 安装完成后会创建一些目录用来存放运行文件和配置文件,存储数据以及记录日志。
不同安装方式得到的文件和目录位置有所不同,具体如下:

注意:
- 压缩包解压安装时,目录相对于软件所在目录;
Docker 容器使用压缩包解压安装的方式,软件安装于 /opt/emqx 目录中;- data、log、plugins 目录可以通过配置文件设置,建议将 data 目录挂载至高性能磁盘以获得更好的性能。但对于属于同一集群的节点, data 目录的配置应该相同。
2、文件和目录说明
这里介绍一下其中的部分目录,其中包含的文件和子文件夹。

注意:
EMQX 的配置项存储在 etc 和 data/configs 目录下,二者的主要区别是 etc 目录存储只读的配置文件,用户通过 Dashboard 和 REST API 提交的配置将被保存到 data/configs 目录下,并支持在运行时进行热更新。
EMQX 读取这些配置并将其合并转化为 Erlang 原生配置文件格式,以便在运行时应用这些配置。
配置文件手册:https://www.emqx.io/docs/zh/v5.1/configuration/configuration.html
二、通过Docker Compose安装MQTT
1、下载emqx-5.1.6的安装包
- 下载地址:https://www.emqx.com/zh/try?product=broker

后面通过 Docker Compose启动时,发现报错,会提示我们缺少一些文件等问题。所以,我们提前将下载压缩包中需要的文件复制到我们映射的数据卷中。文件在压缩包里面的 /opt/emqx/中。
通过我再三的试错摸索,emqx-5.1.6版本需要提前把下面几个文件复制到我们对应的数据卷中。
└── emqx├── data│ └── configs├── etc├── acl.conf├── certs│ ├── cacert.pem│ ├── cert.pem│ ├── client-cert.pem│ ├── client-key.pem│ ├── key.pem│ └── README├── emqx.conf└── vm.args
2、准备文件和目录
1)在任意目录创建一个 mqtt_emqx5文件夹和数据卷所挂载的目录。
[root@centos7 ~]# mkdir /usr/local/src/mqtt_emqx5
[root@centos7 ~]# cd /usr/local/src/mqtt_emqx5
# 数据卷
[root@centos7 mqtt_emqx5]# mkdir -p ./emqx/data
[root@centos7 mqtt_emqx5]# mkdir -p ./emqx/etc
[root@centos7 mqtt_emqx5]# mkdir -p ./emqx/log
2)将上面压缩包中提到的那几个文件复制到我们的数据卷目录中
# 复制完之后,给挂载目录赋予权限
[root@centos7 mqtt_emqx5]# chmod 777 -R ./emqx/
创建并编写docker-compose.yaml
3)创建并编写docker-compose.yaml
[root@centos7 mqtt_emqx5]# cat docker-compose.yaml
version: '3.7'services:emqx5_s1:image: "emqx/emqx:5.1.6"container_name: "emqx5_s1"environment:- "EMQX_NAME=emqx5_s1"- "EMQX_HOST=127.0.0.1"ports:- 1883:1883- 8083:8083- 8084:8084- 8883:8883- 18083:18083volumes:- $PWD/emqx/etc:/opt/emqx/etc- $PWD/emqx/data:/opt/emqx/data- $PWD/emqx/log:/opt/emqx/log#restart: always
[root@centos7 mqtt_emqx5]#
EMQX默认开启的MQTT服务各个端口说明:
- 1883:MQTT 协议端口
- 8883:MQTT/SSL 端口
- 8083:MQTT/WebSocket 端口
- 8084:MQTT/WebSocket/SSL端口
- 8080:HTTP API 端口
- 18083:Dashboard 管理控制台端口
最终 mqtt_emqx5文件夹中的内容如下:
[root@centos7 mqtt_emqx5]# tree
.
├── docker-compose.yaml
└── emqx├── data│ └── configs├── etc│ ├── acl.conf│ ├── certs│ │ ├── cacert.pem│ │ ├── cert.pem│ │ ├── client-cert.pem│ │ ├── client-key.pem│ │ ├── key.pem│ │ └── README│ ├── emqx.conf│ └── vm.args└── log6 directories, 10 files
3、启动MQTT
- 使用 docker-compose up启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试,通过 Ctrl-C停止命令时,该容器也会停止。
- 使用 docker-compose up -d命令,则将会在后台启动并运行该容器,一般推荐使用。
一般进入到 docker-compose.yml的上下文目录中,执行命令:
- 启动项目:docker-compose up -d
- 停止项目:docker-compose down
[root@centos7 mqtt_emqx5]# docker-compose up
Starting emqx5_s1 ... done
Attaching to emqx5_s1
emqx5_s1 | WARNING: Default (insecure) Erlang cookie is in use.
emqx5_s1 | WARNING: Configure node.cookie in /opt/emqx/etc/emqx.conf or override from environment variable EMQX_NODE__COOKIE
emqx5_s1 | WARNING: NOTE: Use the same cookie for all nodes in the cluster.
emqx5_s1 | EMQX_RPC__PORT_DISCOVERY [rpc.port_discovery]: manual
emqx5_s1 | EMQX_NODE__NAME [node.name]: emqx5_s1@127.0.0.1
emqx5_s1 | Listener ssl:default on 0.0.0.0:8883 started.
emqx5_s1 | Listener tcp:default on 0.0.0.0:1883 started.
emqx5_s1 | Listener ws:default on 0.0.0.0:8083 started.
emqx5_s1 | Listener wss:default on 0.0.0.0:8084 started.
emqx5_s1 | Listener http:dashboard on :18083 started.
emqx5_s1 | EMQX 5.1.6 is running now!
通过浏览器就可以访问 ip:18083端口(默认的用户名是admin,密码为public),登录成功后会打开一个管理控制台网页。主界面如下:

三、MQTTX客户端
官方下载,傻瓜式安装:https://mqttx.app/zh
1、建立连接
新建MQTT服务端连接。

2、订阅主题

MQTT 协议根据主题来转发消息。主题被用来标识和区分不同的消息,它是 MQTT 消息路由的基础。
主题通过 / 来区分层级,类似于 URL 路径。MQTT 主题支持以下两种通配符:+ 和 #。
- +:表示单层通配符,例如 a/+ 匹配 a/x 或 a/y。
- #:表示多层通配符,例如 a/# 匹配 a/x、a/b/c/d。
注意:通配符主题只能用于订阅,不能用于发布。
关于 MQTT 主题的更多详情,请参阅文章通过案例理解 MQTT 主题与通配符:https://www.emqx.com/zh/blog/advanced-features-of-mqtt-topics
MQTTX客户端的更多使用,查看官方文档。
– 求知若饥,虚心若愚。
相关文章:
通过Docker Compose安装MQTT
一、文件和目录说明 1、MQTT安装时的文件和目录 EMQX 安装完成后会创建一些目录用来存放运行文件和配置文件,存储数据以及记录日志。 不同安装方式得到的文件和目录位置有所不同,具体如下: 注意: 压缩包解压安装时,目…...
Golang企业面试题
Golang企业面试题 基础 高级 Golang有哪些优势?Golang数据类型有哪些Golang中的包如何使用Go 支持什么形式的类型转换?什么是 Goroutine?你如何停止它?如何在运行时检查变量类型?Go 两个接口之间可以存在什么关系&a…...
Jenkins测试报告样式优化
方式一:修改Content Security Policy(临时解决,Jenkins重启后失效) 1、jenkins首页—>ManageJenkins—>Tools and Actions标题下—>Script Console 2、粘贴脚本输入框中:System.setProperty("hudson.model.Directo…...
函数相关概念
4.函数 1.函数的概念 1.什么是函数? 把特点的代码片段,抽取成为独立运行的实体 2.使用函数的好处1.重复使用,提供效率2.提高代码的可读性3.有利用程序的维护 3.函数的分类1.内置函数(系统函数)已经提高的alert(); prompt();confirm();print()document.write(),console.log()…...
2023软考学习营
...
Vue2进阶篇学习笔记
文章目录 Vue2进阶学习笔记前言1、Vue脚手架学习1.1 Vue脚手架概述1.2 Vue脚手架安装1.3 常用属性1.4 插件 2、组件基本概述3、非单文件组件3.1 非单文件组件的基本使用3.2 组件的嵌套 4、单文件组件4.1 快速体验4.2 Todo案例 5、浏览器本地存储6、组件的自定义事件6.1 使用自定…...
Python 正则表达式:强大的文本处理工具
概念: 正则表达式是一种强大的文本匹配和处理工具,它可以用来在字符串中查找、替换和提取符合某种规则的内容。在Python中,使用re模块可以轻松地操作正则表达式,它提供了丰富的功能和灵活的语法。 场景: 正则表达式…...
Linux如何查看系统时间
文章目录 一、使用date命令查看系统时间二、通过/var/log/syslog文件查看系统时间三、通过/proc/uptime文件查看系统运行时间四、通过hwclock命令查看硬件时间五、通过timedatectl命令设置系统时区六、通过NTP协议同步网络时间七、通过ntpstat命令检查NTP同步状态八、使用cal命…...
46. 出勤率问题
文章目录 题目需求实现一题目来源 题目需求 现有用户出勤表(user_login)如下。 user_id (用户id)course_id (课程id)login_in (登录时间)login_out (登出时间)112022-06-02 09:08:242022-06-02 10:09:361…...
Xilinx IDDR与ODDR原语的使用
文章目录 ODDR原语1. OPPOSITE_EDGE 模式2. SAME_EDGE 模式 ODDR原语 例化模板: ODDR #(.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE" .INIT(1b0), // Initial value of Q: 1b0 or 1b1.SRTYPE("SYNC…...
面试系列 - 序列化和反序列化详解
Java 序列化是一种将对象转换为字节流的过程,可以将对象的状态保存到磁盘文件或通过网络传输。反序列化则是将字节流重新转换为对象的过程。Java 提供了一个强大的序列化框架,允许你在对象的持久化和网络通信中使用它。 一、Java 序列化的基本原理 Jav…...
基于Elasticsearch + Fluentd + Kibana(EFK)搭建日志收集管理系统
目录 1、EFK简介 2、EFK框架 2.1、Fluentd系统架构 2.2、Elasticsearch系统架构 2.3、Kibana系统架构 3、Elasticsearch接口 4、EFK在虚拟机中安装步骤 4.1、安装elasticsearch 4.2、安装kibana 4.3、安装fluentd 4.4、进入kibana创建索引 5、Fluentd配置介绍 VC常…...
【Python小项目之Tkinter应用】解决Python的Pyinstaller将.py文件打包成.exe可执行文件后文件过大的问题
文章目录 前言1. 创建新项目2.删除原项目中的全部文件3.将要打包的文件放入该项目目录下4.创建虚拟环境5.设置解释器为虚拟环境中的python解释器6.查看是否成功使用虚拟环境中的python解…...
Ab3d.DXEngine 6.0 Crack 2023
Ab3d.DXEngine 不是另一个游戏引擎(如Unity),它强迫您使用其游戏编辑器、其架构,并且需要许多技巧和窍门才能在标准 .Net 应用程序中使用。Ab3d.DXEngine 是一个新的渲染引擎,它是从头开始构建的,旨在用于标…...
Wireshark抓包常用指令
1.常用过滤规则 指定源地址: ip.src 10.0.1.123ip.src 10.0.1.123 && udphttp数据链路层:筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src 04:f9:38:ad:13:26筛选源mac地址为04:f9:38:ad:13:26的数据包----eth.src 04:f9:38:ad:13:26网…...
Docker Swarm
Docker Swarm提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。 Swarm mode内置 kv 存储功能,提供了众多的新特性,比如&a…...
jupyter notebook安装和删除kernel的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
中级深入--day16
爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争... Day 1 小黄想要某站上所有的电影,写了标准的爬虫(基于HttpClient库),不断地遍历某站的电影列表页面,根据 Html 分析电影名字存进…...
【洛谷 P1031】[NOIP2002 提高组] 均分纸牌 题解(贪心)
[NOIP2002 提高组] 均分纸牌 题目描述 有 N N N 堆纸牌,编号分别为 1 , 2 , … , N 1,2,\ldots,N 1,2,…,N。每堆上有若干张,但纸牌总数必为 N N N 的倍数。可以在任一堆上取若干张纸牌,然后移动。 移牌规则为:在编号为 1 …...
E5071C是德科技网络分析仪
描述 E5071C网络分析仪提供同类产品中最高的RF性能和最快的速度,具有宽频率范围和多功能。E5071C是制造和R&D工程师评估频率范围高达20 GHz的RF元件和电路的理想解决方案。特点: 宽动态范围:测试端口的动态范围> 123 dB(典型值)快速测量速度:41毫秒全2端口…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
