本文最后更新于:June 30, 2023 pm

本文作者:[wangwenhai] # 概要:本文主要讲一下刚接触EMQ的时候遇到的一些新手问题,这些问题每天都有人问,但是没人总结,故抽空总结一下,以便后人翻阅.

1.概述

相信很多朋友在初次接触EMQ的时候,都会有一些基础问题,什么端口在哪?还有API怎么调用等等,每天都在群里看到新人问,为了方便大家统一查阅,我专门整理了个文档来记录下来.

2.问答

下面这些是起步的时候遇到的基础问题:

1. EMQ怎么下载?

下载地址:https://www.emqx.io/cn/downloads

image-20200108090253684

版本选择:

  • 如果你是个人用户,建议下载Broker;

  • 如果是企业用户,建议下载Enterprise.

2. EMQ在windows怎么启动?

​根据这两年的研究和使用,我自己发现在windows下启动的时候很不友好,有时候经常启动失败,我总结的办法是:当输入:emqx start的时候,会卡住比较久,在这个时候Ctrl+C取消,然后再来一遍,可能就成功了,总之在windows下启动不太理想,建议用linux或者WSL也可以.

3. 为何我的WEB控制台报404?

EMQ的WEB控制台的端口默认是8080,如果你事先已经占用了8080,比如启动了tomcat,请先去看下是不是冲突了,这种情况大部分是端口冲突.

4. 为何我的WEB控制台启动不了?

原因同上面第三点,端口冲突.

5. 怎么设置WEB界面为中文?

image-20200108090839669

6. WEB界面的管理员账号怎么设置?

image-20200108090915883

下面这些在使用过程中遇到的:

1. 为何我的MQTT客户端连接不了EMQ?

请检查端口是否是1883,或者看看EMQ启动成功了没.

2. 为何我改了XXX配置还是不行?

EMQ的配置修改了以后需要重启才能加载进内存.

3. 为何我的Mysql插件配置成功了但是还是没有效果?

EMQ的匿名连接默认是开的,也就是默认不需要认证,如果开启Mysql认证插件,就需要配合关闭匿名,具体操作如下:

  • 打开emqx.conf,关闭匿名模式,大概在410行的位置处,把【anonymous=true】改成【anonymous=false】;

  • 在大约415行处【acl_nomatch = allow】改成【acl_nomatch = deny】;

  • 如果需要严格约束,可以配置当ACL不匹配的时候拒绝连接:445行的【acl_deny_action=ignore】改为【acl_deny_action=disconnect】。

4. 为何我的Mysql认证插件老是拒绝连接?

检查密码的加密方式是不是有问题.

5. 为何我的WebHook插件没有效果?

有2种情况:

  • URL配置错误,倒是webhook请求不到
  • webhook压根没启动

6. 怎么监控设备上下线?

目前有2种形式:

  1. 用一个MQTT客户端订阅下面的两个topic:

    主题(Topic) 说明
    ${clientid}/connected 上线事件。当某客户端上线时,会发布该消息
    ${clientid}/disconnected 下线事件。当某客户端离线时,会发布该消息
    • ‘connected’ 事件消息的 Payload 可解析成 JSON 格式:
    {
        "clientid":"id1",
        "username":"u",
        "ipaddress":"127.0.0.1",
        "connack":0,
        "ts":1554047291,
        "proto_ver":3,
        "proto_name":"MQIsdp",
        "clean_start":true,
        "keepalive":60
    }
    • ‘disconnected’ 事件消息的 Payload 可解析成 JSON 格式:
    {
        "clientid":"id1",
        "username":"u",
        "reason":"normal",
        "ts":1554047291
    }
  2. 用WebHook插件:

    WebHook 插件

    emqx_web_hook 插件可以将所有 EMQ X 的事件及消息都发送到指定的 HTTP 服务器。

    配置 WebHook 插件

    • etc/plugins/emqx_web_hook.conf:
    ## 回调的 Web Server 地址
    web.hook.api.url = http://127.0.0.1:8080
    
    ## 编码 Payload 字段
    ## 枚举值: undefined | base64 | base62
    ## 默认值: undefined (不进行编码)
    ## web.hook.encode_payload = base64
    
    ## 消息、事件配置
    web.hook.rule.client.connected.1     = {"action": "on_client_connected"}
    web.hook.rule.client.disconnected.1  = {"action": "on_client_disconnected"}
    web.hook.rule.client.subscribe.1     = {"action": "on_client_subscribe"}
    web.hook.rule.client.unsubscribe.1   = {"action": "on_client_unsubscribe"}
    web.hook.rule.session.created.1      = {"action": "on_session_created"}
    web.hook.rule.session.subscribed.1   = {"action": "on_session_subscribed"}
    web.hook.rule.session.unsubscribed.1 = {"action": "on_session_unsubscribed"}
    web.hook.rule.session.terminated.1   = {"action": "on_session_terminated"}
    web.hook.rule.message.publish.1      = {"action": "on_message_publish"}
    web.hook.rule.message.deliver.1      = {"action": "on_message_deliver"}
    web.hook.rule.message.acked.1        = {"action": "on_message_acked"}

7. 怎么监控设备发送的数据?

可以和第八点一样的形式,或者使用规则引擎

下面这些是比较高级的使用:

1. 怎么让我的XXX设备通过MQTT协议把数据上报到EMQ?

让设备作为一个客户端,然后向一个topic发送数据即可.

2. 怎么设计一个简单的物联网平台?

设计一个平台比较复杂,没有能分分钟完成的,建议先参考同类,总结需求再提出设计方案..

欢迎加入QQ群进行讨论:475512169

3.建议

建议大家多阅读文档,最好是通读一遍,大概有个印象,每次遇到问题就能直接去查阅,而不是反反复复的问问题,其实每个问题都是很多人重复问过的.

4.总结

本文总结了一些EMQ的新手使用问题.