本文最后更新于:June 30, 2023 pm
本文作者:[wangwenhai] # 概要:本文主要讲一下刚接触EMQ的时候遇到的一些新手问题,这些问题每天都有人问,但是没人总结,故抽空总结一下,以便后人翻阅.
1.概述
相信很多朋友在初次接触EMQ的时候,都会有一些基础问题,什么端口在哪?还有API怎么调用等等,每天都在群里看到新人问,为了方便大家统一查阅,我专门整理了个文档来记录下来.
2.问答
下面这些是起步的时候遇到的基础问题:
1. EMQ怎么下载?
下载地址:https://www.emqx.io/cn/downloads
版本选择:
如果你是个人用户,建议下载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界面为中文?
6. WEB界面的管理员账号怎么设置?
下面这些在使用过程中遇到的:
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种形式:
用一个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 }
用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的新手使用问题.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!