【EMQX实践】EMQX 配置及运用

EMQX实战部署

在先前一系列精心策划的篇章中,我们已深入浅出地剖析了EMQX的安装流程、丰富功能及其独特优势,更详尽地探讨了如何在Java的SpringBoot应用框架中巧妙设计架构、精心编织代码。而今,本文旨在引领您跨越理论至实践的桥梁,聚焦于如何在真实应用场景中迅速部署EMQX以构建高效网关服务,并实现与具体业务逻辑的无缝数据交流与互动,从而加速您的项目落地与价值实现。

前提背景

  • 安装好EMQX服务
  • 编写好EMQX客户端的SpringBoot项目
  • 准备好设备(可以通过MQTTX模拟)

EMQX在实际运用中最需要做什么配置?

在EMQX的实际运用中:
安全认证配置确实是首要考虑的配置之一。
如果使用到Http接口,那么http签名配置也是必不可少的。
需要用到EMQX系统功能,授权配置也是重中之重。

安全认证配置

一机一密

一机一密认证是一种高安全性的设备认证方式,也是物联网常用一种安全认证方式。
一机一密认证是指预先为每个设备烧录其唯一的设备证书(通常包括ProductKey、DeviceName和DeviceSecret)。当设备与物联网平台建立连接时,物联网平台会对其携带的设备证书信息进行认证。这一认证过程确保了设备的唯一性和合法性,防止了非法设备的接入。
优势
高安全性:由于每个设备都拥有唯一的设备证书,因此可以有效防止非法设备的接入和数据的泄露。
易管理性:物联网平台可以方便地通过设备证书对设备进行管理和控制,降低了管理成本和维护难度。
可扩展性:随着物联网设备的不断增加,一机一密认证方式可以轻松地扩展到新的设备上,无需对原有系统进行大规模改造。
所以EMQX在实际运用中,首要做的配置-安全认证配置

认证配置

EMQX Dashboard 提供了开箱即用的认证与权限管理功能,用户仅通过用户界面,就可以快速实现客户端认证授权机制的配置,无需编写代码或手动编辑配置文件,即可对接各类数据源与认证服务,实现各个级别与各类场景下的安全配置,以更高的开发效率获得更安全的保障。

创建认证

在认证页面下的右上角,点击 创建 按钮,即可进入到创建认证的页面。创建一个认证需要选择一种认证方式,选择完成后需要选择一个存储或获取认证信息的数据源(JWT 认证方式除外),认证数据可以从这些数据源包括数据库或 HTTP 服务中获取,最后再配置连接到该数据源的连接信息即可。
认证方式:Password-Based,使用客户端 ID 或用户名加密码的认证方式;
image.png
数据源选择:redis
image.png
选择加密方式及加盐方式:加密方式md5 ,加盐方式prefix
image.png
初始化数据到redis:
HMSET “mqtt_user:username” “password_hash” “66ace8890090c2a50e729318d45fe53b” “salt” “abc”

验证

image.png

http签名配置

创建API秘钥

image.png
image.png

记录秘钥

appId: *************
appSecret: *************

授权配置

以开通EMQX系统消息为例。
在 EMQX Dashboard 页面,点击左侧导航目录的 访问控制 -> 授权 进入授权页面。
EMQX 已默认配置了基于文件的授权检查器。您可点击 File 数据源对应的操作栏下的 设置 按钮查看或更改 ACL 文件中配置的授权规则。
在 授权页面,单击创建,选择数据源为 File,点击下一步,进入配置参数页签:
{allow, {user, "clientdevice"}, subscribe, ["$SYS/#"]}.
clientdevice:客户端名字
image.png

image.png

日志与监控配置

日志配置:EMQX的日志系统非常灵活,可以配置日志级别、日志文件路径、日志滚动策略等。在etc/log.conf文件中,也可以在EMQX Dashboard 页面配置。
监控配置:EMQX提供了丰富的监控指标,如连接数、消息吞吐量、系统负载等。通过配置监控插件(如emqx_management),可以将这些指标暴露给外部监控系统(如Prometheus)进行实时监控和告警。

Redis初始化密码账号配置

一机一密

username: emqx-client
password: a123456
prefix: xmhxxx
密码加密方式:
前缀加密码生成字符串,并通过MD5加密

//加密方式
public String sign(String prefix, String password){
    byte[] bytes = SignUtil.encryptMD5(prefix+password);
    retrun SignUtil.byte2hex(bytes);
}



public class SignUtil {

    public static byte[] encryptMD5(String data) throws IOException {
        return encryptMD5(data.getBytes("UTF-8"));
    }



    public static String byte2hex(byte[] bytes) {
        StringBuilder sign = new StringBuilder();

        for(int i = 0; i < bytes.length; ++i) {
            String hex = Integer.toHexString(bytes[i] & 255);
            if (hex.length() == 1) {
                sign.append("0");
            }

            sign.append(hex);
        }

        return sign.toString();
    }
}

执行Redis指令:

HMSET “mqtt_user:emqx-client” “password_hash” “8edc9f10b9618f65aebb3f529af93bbd” “salt” “xmhzzz”
HMSET “mqtt_user:8445211” “password_hash” “8edc9f10b9618f65aebb3f529af93bbd” “salt” “xmhzzz”

SpringBoot项目( emqx-example-service)

源码地址,gitee拉取代码
image.png

EMQX配置信息

application-dev.yml

emqx:
  sdk:
    enable: true
    host: 127.0.0.1
    tcpPort: 1883
    httpPort: 18083
    username: emqx-client
    password: a123456
    appId: 0c94e0423b409483
    appSecret: e379f64e96d383ced430804512c3e7f1
    ssl: false
    sysSubscribeTopics:
      - sys/+/+/thing/event/property/post

SpringBoot多环境启动配置

因为我们连接EMQX配置信息写在application-dev.yml中,需要在启动SpringBoot项目时候配置dev环境。
idea可以通过下面方式配置:
image.png
也可以application.yml配置环境信息

spring: 
  profiles:
    active: dev

如果是jar包启动可以通过启动参数配置
java -jar emqx-example-service-1.0.0-SNAPSHOT.jar -Dspring.profiles.active=dev

项目启动

image.png
SpringBoot启动成功
连接EMQX成功
订阅topic成功
image.png

MQTTX模拟设备和服务器进行交互

image.png

设备连接

点击连接按钮,建立连接
image.png
设备成功连接EMQX
image.png
服务端接收到设备上线系统消息
SysMqttListener topic[$SYS/brokers/emqx@127.0.0.1/clients/SMART:8445211/connected] message[{“username”:“8445211”,“ts”:1721373363001,“sockport”:1883,“protocol”:“mqtt”,“proto_ver”:5,“proto_name”:“MQTT”,“keepalive”:60,“ipaddress”:“127.0.0.1”,“expiry_interval”:0,“connected_at”:1721373363001,“clientid”:“SMART:8445211”,“clean_start”:true}]

设备发送消息

image.png
服务端接收到消息:
topic[sys/SMART/8445211/thing/event/property/post]
message[{“id”:1716799607917,“params”:{“iccid”:142424,“temp”:“12”,“door”:1,“light”:20,“signal”:100,“lock”:0},“version”:“1.0”,“method”:“thing.event.property.post”}]

设备订阅topic

设备订阅topic【sys/SMART/8445211/thing/service/property/set】
image.png
服务端下发消息
image.png
设备接收到消息
image.png

设备断开连接

点击断开连接按钮,设备断开EMQX连接
image.pngEMQX发生设备断开连接的系统消,此时服务端将接收到设备断开消息,感知到设备下线。
topic[$SYS/brokers/emqx@127.0.0.1/clients/SMART:8445211/disconnected] message[{“username”:“8445211”,“ts”:1721375080342,“sockport”:1883,“reason”:“normal”,“protocol”:“mqtt”,“proto_ver”:5,“proto_name”:“MQTT”,“ipaddress”:“127.0.0.1”,“disconnected_at”:1721375080342,“connected_at”:1721373363001,“clientid”:“SMART:8445211”}]

其它

源码地址(https://gitee.com/xmhzzz/emqx-practice
关注公众号【 java程序猿技术】获取EMQX实践系列文章

03-19
<think>好的,用户想了解EMQX MQTT Broker的使用说明、功能介绍和安装配置。首先,我需要整理EMQX的基本信息,包括它是什么,主要功能,以及如何安装和配置。根据用户提供的引用,里面有提到Docker部署、命令行工具的使用以及Python库的安装,这些都需要涵盖进去。 首先,EMQX是一个开源的MQTT Broker,支持MQTT 5.0协议,高并发和低延迟。功能方面需要强调其核心功能,比如消息路由、认证授权、集群扩展等。然后安装部分,用户提到了Docker部署,引用[2]和[3]都涉及Docker命令,所以需要详细说明Docker安装步骤。另外,引用[2]还提到了paho-mqtt库的安装和使用,可能需要补充客户端连接的例子,比如Python代码示例。 用户可能还需要知道如何验证安装是否成功,比如使用mosquitto_pub和mosquitto_sub命令测试连接,这部分在引用[1]里有例子,可以引用。配置方面,需要提到配置文件的位置和常见配置项,比如监听端口、认证方式,引用[4]提到了项目结构,可能涉及配置文件路径。 另外,用户可能关心基本操作,比如启动、停止服务,以及如何订阅和发布消息。这里需要分步骤说明,确保清晰。安全问题也是重点,比如如何设置TLS和权限控制,引用里的信息可能不够,需要结合EMQX官方文档补充。 最后,生成相关问题时要围绕用户的需求,可能包括性能优化、高可用配置、安全设置以及客户端开发等。确保问题覆盖用户可能感兴趣的扩展话题,帮助他们进一步学习。</think>### EMQX MQTT Broker 使用说明与功能介绍 #### **EMQX 简介** EMQX 是一款开源的高性能 **MQTT Broker**,支持 MQTT 5.0 协议,专为物联网场景设计,具备高并发、低延迟和分布式扩展能力。其核心功能包括消息路由、安全认证、数据持久化、集群管理等[^1][^3]。 --- #### **主要功能** 1. **消息路由与发布/订阅** - 支持 MQTT 协议的消息发布与订阅,可通过主题(Topic)实现灵活的路由机制。例如,使用 `mosquitto_pub` 发布消息到主题 `topic/test`: ```bash mosquitto_pub -h <EMQX_IP_ADDRESS> -p 1883 -t "topic/test" -m "Hello, EMQX!" ``` 2. **安全与认证** - 支持用户名/密码、客户端证书、JWT 等多种认证方式。 - 提供 ACL(访问控制列表)管理客户端权限[^4]。 3. **高可用与扩展性** - 支持横向集群扩展,通过 Erlang/OTP 分布式架构实现高可用性[^4]。 4. **数据集成** - 支持与 MySQL、PostgreSQL、Kafka 等外部系统集成,实现数据持久化或实时转发[^3]。 --- #### **安装与配置** ##### 1. Docker 部署(推荐) 通过 Docker 快速启动 EMQX: ```bash docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 emqx/emqx:latest [^2] ``` - **端口说明**: - `1883`:MQTT 协议默认端口 - `8083`:WebSocket 端口 - `8084`:Dashboard 管理界面端口 ##### 2. 二进制安装 从官网下载对应平台的安装包,解压后运行: ```bash ./bin/emqx start ``` ##### 3. 验证安装 访问 Dashboard(默认地址 `http://<IP>:18083`),使用默认账号 `admin/public` 登录,查看运行状态。 --- #### **基本操作** 1. **客户端连接示例(Python)** 安装 Paho-MQTT 客户端库: ```bash pip install paho-mqtt [^2] ``` 订阅消息的代码片段: ```python import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): client.subscribe("topic/test") client = mqtt.Client() client.on_connect = on_connect client.connect("<EMQX_IP_ADDRESS>", 1883, 60) client.loop_forever() ``` 2. **配置文件路径** - 主配置文件:`etc/emqx.conf` - 修改监听端口或认证方式后需重启服务生效[^4]。 --- #### **安全配置建议** - **启用 TLS 加密**:在 `emqx.conf` 中配置 SSL 证书路径。 - **限制匿名访问**:默认允许匿名连接,生产环境建议关闭。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端马农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值