Emqx是发布订阅模式的开源 MQTT 消息服务器。之前叫emqtt,从3.0版本开始改叫EMQ X。和之前emqtt的配置、dashboard界面有一些小差别,基本上一样。
EMQ X的官方文档: EMQ X - 百万级开源 MQTT 消息服务器 — EMQ X - 百万级开源 MQTT 消息服务器 3.2.0 文档
目前百度上能搜到的emqttd详细教程比较少,遇到问题基本上就靠啃这个官方文档。这个文档写的真的很不实用。篇幅巨长,一堆概念、专业术语;然鹅很多涉及具体操作的地方又不给出操作步骤,一两句文字介绍就完事了。本人linux小白,自己瞎捣鼓遇到问题,改了config文件之后,dashboard的websocket就彻底连不上了。解决无果决定卸载重装。发现官方文档没有教怎么卸载!兜兜转转两天终于重装了,问题也解决了。想把遇到的问题总结一下:
1. 不要用记事本或者什么软件编辑config文件
这是两篇解释什么是websocket的文章:
最开始我是想用EMQ Dashboard里的websocket功能 向python代码发送信息,再由python代码进行各种处理。但是发现websocket发出去之后python完全没反应。我感觉可能是emq和python代码里的端口不一致。
我首先是找到了/etc/emqx/emqx.conf配置文件。用sublime打开,一顿狂找看哪里是有关端口的配置,大概是几个listener那里,但是并没有发现什么不对劲,故未作修改。把conf文件关闭之后我重启了我的emqx。
重启之后,我发现一切都不一样了!websocket直接连不上了,页面直接显示端口8083,8084都是connection failed,然后我命令行emq_ctl也不好使了。百度到的很多问题和解决方法都是针对旧版本,也就是emqttd,老版本的配置和emqx好像还是有点不一样,我又不敢乱试,就被这个奇怪的现象绊了整整一天多。
在这个寻求解决方法的过程中,我看到很多人说websocket连不上是因为emq自带的证书无效。后来我在这篇文章也有提到这个问题:
EMQ 内置自签名证书,默认已经启动了加密的 WebSocket 连接,但大部分浏览器会报证书无效错误如net::ERR_CERT_COMMON_NAME_INVALID (Chrome、360 等 webkit 内核浏览器在开发者模式下, Console 选项卡 可以查看大部分连接错误)。
来源:使用 WebSocket 客户端连接 MQTT 服务器 - 简书
我就根据这个问题的解决方法一顿操作:将 etc/certs/ 目录下的pem文件替换成我自己域名的ssl文件;也修改了etc/emqx.conf 配置文件里的证书目录。
我的域名是在阿里云上备案的,阿里云域名申请ssl证书的操作:阿里云域名申请SSL证书 - 简书
但是还是没用啊。
后来看到一个csdn上有人说emqx.conf不能用记事本打开编辑,编码问题什么的,记事本编辑过后就废了,我觉得我应该就是这样把conf文件搞坏的吧。
我的经验就是:不要用记事本或者什么软件编辑config文件了,就用vi吧。。。
本来我还觉得emq很好用的,安装、操作都还挺直接方便的,现在被这些毛病困扰我真的觉得它不好用了!
2. 胡乱的卸载操作
既然已经把配置文件搞坏了,那我把emq卸载重装吧。
查了emqx的官方文档,里面居然没提怎么卸载。不过,emqttd的文档里是有写的,我命令行敲了下emqx uninstall,发现这破程序根本不认这个命令了。
于是我又敲了apt_get remove emqx,显示成功卸载了。
于是我开始重装emq 3.2。装了一半报错说/usr/bin/emqx already exist. 于是我暴躁地删除了这个目录(但是我有留备份)。删除完之后还是报一些错,最后一行是:Errors were encountered while processing: emqx
后来我看到了github上的这个问题:
apt-get remove emqx does not remove /usr/bin/emqx* · Issue #2450 · emqx/emqx · GitHub
于是我又试了dpkg -i emqx, dpkg -p emqx, 其实还是有一些小问题,然后百度解决好了。
最后就卸载重装好了。
3. 在dashboard上开启、配置plugins
下图是所有plugins的列表,在最左侧可以启动、停止或是更改配置。

我想用emq向服务端python程序发送信息,python对信息进行一些后续的处理,则需要更改名为emqx_web_hook的插件,将其端口改为和python程序绑定的端口号一致。

在这个页面就可以改,但是在dashboard更改Plugins的设置,重启emq之后就没了。官方是这么说的:
出于安全性考虑,通过 Dashboard 配置的插件参数不会持久化到配置文件,即每次重启 EMQ 后配置信息会丢失。用户通过界面上配置的插件参数,在确认正确可用后应当将配置写到 etc/plugins/ 目录下响应的配置文件中。
参考:emqx-tutorial-cn/emqx-dashboard-useage-guide at master · emqx/emqx-tutorial-cn · GitHub