MQTT协议分析—搭建EMQ以平台侧的视角体验MQTT通信

举报
樊心昊 发表于 2020/08/23 15:33:23 2020/08/23
【摘要】 本章将带领大家通过在自己的服务器上搭建一个MQTT Broker(消息中间件),以华为平台侧的视角体验MQTT通信,这里将自己设想为华为云平台的建设者和管理人员,深度理解其管理和通信机制。EMQ X Broker介绍EMQ X Broker 是基于高并发的 Erlang/OTP 语言平台开发,支持百万级连接和分布式集群架构,发布订阅模式的开源 MQTT 消息服务器。 EMQ X Broker...

本章将带领大家通过在自己的服务器上搭建一个MQTT Broker(消息中间件),以华为平台侧的视角体验MQTT通信,这里将自己设想为华为云平台的建设者和管理人员,深度理解其管理和通信机制。

EMQ X Broker介绍

EMQ X Broker 是基于高并发的 Erlang/OTP 语言平台开发,支持百万级连接和分布式集群架构,发布订阅模式的开源 MQTT 消息服务器。

 

EMQ X Broker 在全球物联网市场广泛应用。无论是产品原型设计、物联网创业公司、还是大规模的商业部署,EMQ X Broker 都支持开源免费使用。

官网:https://www.emqx.io/cn/products/broker

EMQ X github:https://github.com/emqx/emqx

购买弹性云服务器

打开华为云官网:https://activity.huaweicloud.com/

进入控制台

image.png

在服务列表中选择“弹性云服务器ECS”

image.png

点击右上角“购买弹性云服务器”

image.png

大家可以根据自己情况进行购买,最低配置就能运行EMQ X Broker了,如果你进行了“学生认证”或者24周岁一下,可以购买云创校园的学生服务器:https://developer.huaweicloud.com/campus?productType=KC1_1&timeType=1&regionType=1&domainItemData=

我选择的操作系统为CentOS7.1 64bit,服务器架构为x86。

配置安全组

服务器供应商为了安全,默认将大部分的端口都进行关闭,我们为了能让服务器内运行的程序(MQTT X Broker)和外部正常通信,所以需要开启相关端口,在服务列表中选择“弹性云服务器ECS”,找到需要开启端口的服务器,点击列表右侧“更多”选项,选择“网络设置”,选择“更改安全组”,如下图所示:image.png

选择“新建安全组“。

image.png

点击右上角“创建安全组”。

 

image.png

名称填写“MQTT”,模板选择“自定义”,点击确定即可开始配置。

image.png

分别将出方向和入方向配置为下图所示即可:

image.png

image.png

下载EMQ安装并配置开启EMQ服务

       到EMQ官网下载软件包,选择“产品”,EMQ X Broker。

image.png

我这里使用的版本是V4.1.2,你可以根据你的CPU架构和操作系统版本选择软件包,如果你的服务器为arm架构的鲲鹏服务器可以选择V4.2版本,该版本有ARM架构的包支持,我们这里就以x86架构CentOS7.6为例向大家演示。

复制下图中自动生成的下载链接。

image.png

有SSH工具连接你的服务器并登陆,输入如下指令:

wget https://www.emqx.io/cn/downloads/broker/v4.1.2/emqx-centos7-v4.1.2.zip

将该软件包下载包服务器中,输入下列命令进行解压缩,即可得到一个名为emqx的文件夹:

unzip emqx-centos7-v4.1.2.zip

使用cd emqx进入该文件夹,输入下列指令启动emq x broker服务:

./bin/emqx start

出现emqx 4.1.2 is started successfully!说明启动成功。

输入 ./bin/emqx_ctl status 指令查询状态,出现

Node 'emqx@127.0.0.1' is started

emqx v4.0.0 is running

说明运行正常。

进入WEB管理界面添加账号

现在可以尝试打开Web界面,输入你服务器的ip加上18083端口,假设我的服务器ip为192.168.0.1,就在浏览器地址栏中输入192.168.0.1: 18083,出现以下界面说明一切正常,你还可以根据需求将该ip解析到域名上:

image.png

默认用户名为:admin

默认密码为:public

为了安全起见,登陆进去记得修改默认密码,这个用户名和密码也是待会我们进行连接体验时需要用到的。

image.png      如果你觉得英文看着不太舒服,可以点击左侧“Setting”,将默认语言修改为“中文”,点击Apply即可完成修改,如下图:image.png

这里给大家介绍一下下图中的各项选项卡的功能:

监控:显示服务器、EMQ进程、连接到服务器的客户端、流量等等数据。

客户端:显示当前连接到MQTT服务器的客户端的详细信息,例如ip地址、设备ID、用户名、心跳、会话创建时间等等一系列参数。

主题、订阅:显示当前MQTT客户端发布和订阅的主题信息。

规则引擎:类似于华为IoTDA的规则引擎,主要用于联动,例如产生xxx消息时,触发SQL数据库写入操作等等。

主题监控:实时显示流入、流出和丢弃的消息,默认关闭。

插件:可以添加一系列插件,例如提供身份鉴权用户名、密码认证、Web 控制台(我们现在能看到这一切就是该插件的功劳)、提供HTTP接口和数据库相关等的插件。

模块:暂不关心。

工具:提供Websocket(用作MQTT客户端,可以去连接MQTT服务器)和HTTP接口(我们可以通过调用这些接口来获取数据)。

设置:语言和主题(这里的主题是指WEB界面的颜色和MQTT没有关系)的设置。

通用:用户的添加、删除、修改(更改密码就是在这里进行)和帮助手册的查阅。

image.png

利用MQTT.fx对接体验

我们将自己当作华为IoTDA的管理员,用mqtt.fx软件模拟一个真实设备接入刚刚搭建的EMQ服务器上,以管理员的视角来感受

对于EMQ的默认监听端口定义如下:

image.png

这里为了简单起见,我们使用1883非加密端口进行连接,在前面的安全组配置时已经对其进行了开放。

     进行MQTT连接时最少需要MQTT域名/ip、端口、Device ID、Username、Password这几项信息。

Device ID:可以自定义,比我常常使用设备的IMEI号作为Device ID,只要是独一无二的编号都可以作为Device ID,华为IoTDA平台的Device ID是由一部分由我们自己定义,另一部分由平台根据资源空间等参数生成。

Username:可以使用之前登陆web界面使用的admin用户名,也可以自己在“通用”中新建用户,华为IoTDA平台的Username是由系统根据Device ID和一些信息自动生成的。

Password:可以使用之前登陆web界面使用的密码,华为IoTDA平台的密码是由我们自己设定的并通过一些计算最终生成的(最终的密码还取决于是否使用SSL加密等)。

现在可以开始进行连接了,打开mqtt.fx软件。

image.png

点击“设置”按钮,图中红框处。

image.png

将上面所说的几项信息填写进去,如下图所示,其余配置均保持默认即可,最后点击“OK”即可完成配置。

image.png

点击“connect”,如果出现下如所示绿灯说明连接成功。

image.png

我们可以打开之前的web界面查看连接的客户端信息,如下图所示

image.png

现在设备连接上了,我们可以订阅一个自定义的topic试试能否通信,点击“Subscribe”标签,在编辑框中输入$home/bedroom/light,模拟我卧室中的一盏智能灯,关于topic的规则在后续MQTT章节中向大家讲解。

image.png

点击“Subscribe”按钮即可完成订阅,当收到该topic发布的主题时,消息内容将在右侧显示,如下图所示:

image.png

我们现在可以打开web界面查看“订阅”,其中显示了一个设备订阅了“$home/bedroom/light”topic:

image.png

现在继续使用MQTT.fx向这个topic发布一条主题,看看能否接收到,切换到Publish标签,在topic编辑栏中填写刚才订阅的topic,在文本编辑框中输入“hello,MQTT!”,点击右侧“Publish”即可发布。

image.png

点击完了发布马上会弹出如下图所示的提示,代表MQTT.fx从刚才订阅的topic中收到了消息:

image.png

到这里体验就算结束了,大家有兴趣的话可以自己多发送一些试试,把这两个软件大概熟悉一下,后面我的抓包分析时就使用它们,最后断开连接,点击disconnect,如下图。

image.png

总结

       MQTT服务器实际上就像微博,上面有好多大佬(Topic),你喜欢谁就可以关注谁(订阅),一旦大佬发送微博(发布),你马上就能收到对应的信息,这样的总结相信大家都能理解。实际上MQTT服务器仅仅作为一个中间件,对客户端的身份进行校验,根据发布和订阅的Topic对消息的转发,在它看来无论是MQTT设备还是WEB服务器都是客户端。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。