当前位置: 首页 > news >正文

通过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. 创建新项目![请添加图片描述](https://img-blog.csdnimg.cn/36dcadc85d864a08b93af78b9e79ff6d.jpeg)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端口…...

python打卡day49

知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

SpringAI实战:ChatModel智能对话全解

一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM&#xff0…...