一、安装EMQ

  1. 进入EMQ官网,下载EMQ Windows版本(这里下载了EMQ X Broke v3.2.2,暂时的最新版本)
  2. 解压emqx-windows10-v3.2.2.zip到自己指定的目录
  3. 打开命令提示符窗口,进入emqx解压目录
  4. 输入命令:bin\emqx start  或者bin\emqx console(会弹出Erlang),启动EMQ
  5. 在浏览器打开http://127.0.0.1:18083,输入默认用户名“admin”和默认密码“public”,进入EMQ管理控制台还可以将其设置为中文面板。
  6. Erlang中不报错或dashboard中能看到emqx@127.0.0.1即安装成功

emq集群原理 对外发布IP emq使用_mqtt

emq集群原理 对外发布IP emq使用_mqtt_02

emq集群原理 对外发布IP emq使用_emq_03

emq集群原理 对外发布IP emq使用_mqtt_04

 

二、客户端测试 - MQTT.fx

安装好服务器端之后,使用mqtt的客户端对服务器进行相关测试。

有不少mqtt客户端,mosquito提供了命令行进行测试,我知道的还有mqtt spy也是一个mqtt客户端的可视化界面,这里使用MQTT.fx

创建mqtt连接。指定连接相关信息,包括连接名称(可以随意输入)、代理地址(安装在本地,所以输入127.0.0.1)、端口号(MQTT缺省端口为1883),然后单击“ok”设置完成。其他设置先保持缺省值,可之后慢慢学习。

emq集群原理 对外发布IP emq使用_命令提示符_05

点击连接,出现以下界面表示连接成功

订阅默认主题home/garden/fountain(可编辑成任何主题)

emq集群原理 对外发布IP emq使用_mqtt_06

然后在publish下发布相同主题的消息

emq集群原理 对外发布IP emq使用_mqtt_07

subscribe则可以订阅到刚才刚发布的消息。

emq集群原理 对外发布IP emq使用_emq_08

dashboard中展示出刚才发布订阅消息操作中,统计数据的变化

emq集群原理 对外发布IP emq使用_80端口_09

三、关闭服务

命令提示符中输入bin\emqx stop即可关闭

emq集群原理 对外发布IP emq使用_80端口_10

四、报错:

一般人不会出现的报错,丢了一班人的脸(忽略忽略)

dashboard总提示“URL not found”,开启服务时emqx console中报错如下:

Failed to start Ranch listener 'http:management' in ranch_tcp:listen([{cacerts,'...'},{key,'...'},{cert,'...'},{port,8080},{nodelay,true},{send_timeout_close,true},{send_timeout,15000},{backlog,512}]) for reason eacces (permission denied)
[Plugins] Load plugin emqx_management failed, cannot start plugin emqx_management for {...}

其原因为8080端口被占用,解决办法:

1. 找出占用8080端口的程序,结束进程,然后重启EMQ。

# 在命令提示符中输入下面命令,查看端口8080是否被占用
netstat -aon|findstr 8080
# 结果:此处8080端口被PID 5744占用,监听5744端口中
#  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       5744
#  TCP    [::]:8080              [::]:0                 LISTENING       5744

# 输入下面命令,查看时哪个进程或程序占用了某个端口;或者直接进入任务管理器查看详细信息中PID为5744的进程。
tasklist|findstr 5744

# 用以下命令关闭xxx.exe;或者直接在任务管理器中关闭相关进程即可
taskkill /f /t /im xxx.exe

# 再次检查8080端口是否被占用,如果没有信息返回,表示没有被占用,可放心使用啦
netstat -aon|findstr 8080

2. 位于etc\plugins下,修改emqx_management.conf文件中端口为没有被占用的端口,然后重启EMQ

# 修改此处的8080端口为其他没有被占用的端口,如8090
management.listener.http = 8090

参考文章:

常见MQTT服务器搭建与试用

如何查看某个端口被谁占用