• 通过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的安装包

    在这里插入图片描述

    后面通过 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2)将上面压缩包中提到的那几个文件复制到我们的数据卷目录中

    # 复制完之后,给挂载目录赋予权限
    [root@centos7 mqtt_emqx5]# chmod 777 -R ./emqx/
    
    • 1
    • 2

    创建并编写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]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    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!
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    通过浏览器就可以访问 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客户端的更多使用,查看官方文档。

    – 求知若饥,虚心若愚。

  • 相关阅读:
    【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
    Flink 实践 | B站流式传输架构的前世今生
    集群保持集群负载均衡和hash一致性
    Nest.js项目初始配置
    【CentOS】忘记root密码
    【云原生之k8s】kubernetes核心组件
    ChatGPT:深度学习和机器学习的知识桥梁
    Python数据权限的管理通常涉及到几个关键组件:身份验证,、授权和访问控制。这通常是通过使用数据库、ORM(对象关系映射)框架、API框架和中间件
    elasticsearch 索引文档相关操作
    嵌入式中 动态阿拉伯语字符串 转换 LCD显示字符串【感谢建国雄心】
  • 原文地址:https://blog.csdn.net/qq_42402854/article/details/132645459