容器安装emqx

安装

  1. 设置镜像名emqx/emqx:5.3.1
  2. 配置nodePort端口映射:mqtt客户端连接端口1883、emqx管理界面端口18083
  3. 设置挂载(可选):挂载目录/opt/emqx/data/opt/emqx/log
  4. 访问emqx管理界面<IP>:18083,默认用户名admin,密码public
  5. 安装MQTTX客户端,输入HOST:mqtt://、Port:18083,其他信息随便输入,点击连接即可

使用场景

监听mq客户端连接或离线的状态(规则引擎)

  1. 登录emqx管理界面

  2. 点击Rules->Create

  3. SQL Editor输入

    1
    2
    3
    4
    5
    SELECT
    *
    FROM
    "$events/client_disconnected", #设备断开事件
    "$events/client_connected" #设备连接事件(如果不需要连接事件,可删)
  4. 在左侧点击Actions->Add Action

  5. 在Action选择Republish(转发消息),输入topic的名字,例如exxk/status/client,其他默认即可,Payload设置为空,空代表消息原封不动转发。

  6. 最后在代码里面订阅exxk/status/client即可,代码如下

    1
    2
    3
    4
    5
    log.info("message {}", message);
    String topic= String.valueOf(message.getHeaders().get("mqtt_receivedTopic"));
    if(topic.equals("exxk/status/client")){
    //处理在线或离线逻辑即可
    }
  7. 设备断电离线会有2分钟左右的延迟

常见问题

  1. 问题:配置挂载目录后,启动提示该日志Failed to read: "data/loaded_modules", error: enoent,无法访问管理界面,客户端正常连接。

    解决:更换版本5.3.1解决。