通过Docker Compose安装MQTT

news2025/1/18 6:10:46

一、文件和目录说明

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:18083
    volumes:
     - $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
    └── log

6 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客户端的更多使用,查看官方文档。

– 求知若饥,虚心若愚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/967483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第 3 章 栈和队列(顺序栈,算法 3.3,使用栈解答迷宫问题)

1. 背景说明 若迷宫 maze 中存在从入口 start 到出口 end 的通道,则求得一条存放在栈中(从栈底到栈顶),并返回 TRUE;否则返回 FALSE,注意,该解并非最优解, 最优解需要求得最短路径且可能并非一条。 迷宫…

Auto DevOps介绍

1 Preface/Foreword 随着国际化,信息化,当今是一个VUCA时代。 VUCA:Volatile (易变的),Uncertain (不确定的),Complicated (复杂的)&#xff0c…

类ChatGPT大模型LLaMA及其微调模型

1.LLaMA LLaMA的模型架构:RMSNorm/SwiGLU/RoPE/Transfor mer/1-1.4T tokens 1.1对transformer子层的输入归一化 对每个transformer子层的输入使用RMSNorm进行归一化,计算如下: 1.2使用SwiGLU替换ReLU 【Relu激活函数】Relu(x) max(0,x) 。 【GLU激…

nginx-反向代理缓存

反向代理缓存相当于自动化动静分离。 将上游服务器的资源缓存到nginx本地,当下次再有相同的资源请求时,直接讲nginx缓存的资源返回给客户端。 本地缓存资源有一个过期时间,当超过过期时间,则重新向上游服务器重新请求获取资源。…

书籍推荐-1 Python编程:从入门到实践(第2版)

Python编程:从入门到实践(第2版) 书籍背景 作者介绍 埃里克马瑟斯(Eric Matthes),高中科学和数学老师,现居住在美国阿拉斯加,在当地讲授Python入门课程。他从5岁开始就一直在编写程序…

mysql:[Some non-transactional changed tables couldn‘t be rolled back]不支持事务

1. mysql创建表时默认引擎MyIsam,因此不支持事务的操作; 2. 修改mysql的默认引擎,可以使用show engine命令查看支持的引擎: 【my.conf详情说明】my.cnf配置文件注释详解_xiaolin01999的博客-CSDN博客 3. 原来使用MyIsam创建的表…

python: excel 换行符(_x000D_)

data4 dataframe1.loc[4:34] for idx, datavalue in data4.iterrows():#strnumCommon.Utils.Utils.getAnnualLeave(data)print("[{}]: {}".format(idx, datavalue))slistdatavalue.tolist()hbllBLL.EmpLoyeeHolidaysGet.EmpLoyeeHolidaysGet() #病假4小時_x000D_事假…

无人机集群路径规划MATLAB:孔雀优化算法POA求解无人机集群三维路径规划

一、无人机模型简介 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 二、孔雀优化算法POA介绍 孔雀优化算法( Peafowl Optimization Algorithm, POA), 是由 Jingbo Wang 等于2022 年提出的一种群体智能优化算法。其灵感来源于孔雀的群体行为。 智能优化算法&am…

PlantUML入门教程:画时序图

软件工程中会用到各种UML图,例如用例图、时序图等。那我们能不能像写代码一样去画图呢? 今天推荐一款软件工程师的作图利器--PlantUML,它能让你用写代码的方式快速画出UML图。 一、什么是PlantUML? PlantUML是一个允许你快速作出…

移动零00

题目链接 移动零 题目描述 注意点 将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序必须在不复制数组的情况下原地对数组进行操作 解答思路 采用双指针的思路,左指针指向已移动零的数组的尾部,右指针指向为移动零的数组的头部&…

深度学习推荐系统(五)DeepCrossing模型及其在Criteo数据集上的应用

深度学习推荐系统(五)Deep&Crossing模型及其在Criteo数据集上的应用 在2016年, 随着微软的Deep Crossing, 谷歌的Wide&Deep以及FNN、PNN等一大批优秀的深度学习模型被提出, 推荐系统全面进入了深度学习时代, 时至今日&am…

Python实现字符串模糊匹配

在一个字符串中,有时需对其中某些内容进行模糊匹配以实现条件的判定,如在“你好,hello,world”中判断是否含有“llo”。Python中通过re.search()方法实现,特别地,对于首位起始的内容匹配,也可通过re.match(…

Apolo学习

安装(java1.8 mysql 5.6.5以上) 下载quickStart的包,早apollo下执行两个sql。如果不执行这两个sql,apollo是执行不起来的。会有两个表来记录apollo的执行情况。其中一个表叫apolloportaldb 在apollo目录下会有执行的包。.sh是…

stm32f1xx单片机拦截中断源代码

这个是实现后的效果,可以看到已经没有中断的效果了 这个是拦截前的效果可以看到电平是在变化的 实现原理非常简单:一句话搞定: if(TIM2->CNTTIM2->ARR-5)TIM2->CNT-5; 以下是完整的代码:是用来补充说明和筹字数的 /* …

山西电力市场日前价格预测【2023-09-04】

日前价格预测 预测明日(2023-09-04)山西电力市场全天平均日前电价为305.57元/MWh。其中,最高日前电价为349.83元/MWh,预计出现在19: 15。最低日前电价为226.28元/MWh,预计出现在13: 30。 价差方向预测 1: 实…

Linux CentOS7 系统中添加用户

在linux centOS7系统中,添加用户是管理员的基本操作。作为学习linux系统的基本操作,对添加用户应该多方面了解。 添加用户的命令useradd,跟上用户名,就可以快速创建一个用户。添加一些选项,可以设置更人性化的用户信息…

并发下的Map常见面试题

HashMap 和 HashTable 有什么区别?java中的另一个线程安全的与HashMap极其类似的类是什么?同样是线程安全,它与HashTable在线程同步上有什么不同?HashMap 与 ConcurrentHashMap的区别?为什么 ConcurrentHashMap 比 Has…

【Python技巧】快速安装各种常用库pip、whl、tar.gz最新最全安装方法(超时、快速安装))

【Python技巧】安装各种常用库pip、whl、tar.gz最新最全安装方法 😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&…

Linux系统调试中出现核心转储(core dump)的问题

​ 大家好,我是ST。今天主要分享一下,Linux应用程序发生Segmentation fault段错误时,如何利用core dump文件定位错误。 核心转储 在 Linux 系统中,常将“主内存”称为核心(core),而核心映像(core image) 就是 “进…