系列文章目录
【MQTT服务器】(一)EMQX平台搭建
【MQTT服务器】(二)SpringBoot+Mysql数据库存储MQTT消息
【MQTT服务器】(三)MQTT终端设备
【MQTT服务器】(四)搭建网页
目录
前言
现在网上的物联网平台还是挺多的,比如国外开源的homeassistant,阿里云的物联网平台,其它云也有对应的物联网平台就不一一说了。在物联网设备中,最重要的就是联网通讯了,上报设备的状态或者信息,接收指令等等。物联网的通讯协议常见的有下面七种:MQTT、 DDS、 AMQP、XMPP、 JMS、 REST、 CoAP。
MQTT协议(低带宽),一般适用于设备数据采集从端到服务器的集中星型网络架构
DDS协议(高可靠性、实时),广泛应用于国防、民航、工业控制等领域
AMQP协议(互操作性),主要适用于移动手持设备与后台数据中心的通信和分析
XMPP协议(即时通信),在互联网及时通讯应用中运用广泛
REST/HTTP(松耦合服务调用),客户端和服务器之间交互松耦合,适合在物联网的应用层面
CoAP (受限应用协议),适用于在资源受限的通信的IP网络
JMS (JAVA消息服务),用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信
MQTT因为其低带宽的优点,现在大部分嵌入式物联网设备都是采用的这种协议。
一、EMQX是什么?
EMQX (Erlang MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。
Erlang/OTP是出色的软实时 (Soft-Realtime)、低延时 (Low-Latency)、分布式 (Distributed)的语言平台,而MQTT 是轻量的 (Lightweight)、发布订阅模式 (PubSub) 的物联网消息协议。
EQMX消息服务器具有以下特点。
- 稳定承载大规模的 MQTT 客户端连接,单服务器节点支持 200 万连接。
- 分布式节点集群,快速低延时的消息路由。
- 消息服务器内扩展,支持定制多种认证方式、高效存储消息到后端数据库。
- 完整物联网协议支持,MQTT、MQTT-SN、CoAP、LwM2M、WebSocket 或私有协议支持
可以看到,EMQX性能是非常强大的,而且还可以进行分布式配置节点,作为只有十个不到的物联网设备测试服务器是绰绰有余的。
二、使用步骤
1.下载EMQX安装包
网上获取EMQX安装包的途径还是蛮多的,github或者官网都可以下载,不是CentOS 8系统推荐官网下载,因为可以直接选择平台和格式,不用自己一个一个去找。
我使用的阿里云服务器是CentOS 8.2 64位,censtos8在2021年12月31日已经完成生命周期了,官网推荐的版本选择amd64.rpm格式,虽然能安装,但是运行会报错,找了半天,终于找到一个能用的版本-4.3.8版本github地址。
出现下面的错误,可能是下载的安装包跟平台不一致导致的,也可能是openssl库没有安装。
可以先尝试安装这个库--openssl的github安装说明。不行的话只能换安装包了。
错误一:
{"init terminating in do_boot",{undef,[{crypto,start,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
init terminating in do_boot ({undef,[{crypto,start,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]})Crash dump is being written to: erl_crash.dump...done
FATAL: Unable to start Erlang.
Please make sure openssl-1.1.1 (libcrypto) and libncurses are installed.
Also ensure it's running on the correct platform,
./emqx: line 40: /home/emqtt/emqx/erts-12.1.5/bin/erl: cannot execute binary file: Exec format error
FATAL: Unable to start Erlang.
Please make sure openssl-1.1.1 (libcrypto) and libncurses are installed.
Also ensure it's running on the correct platform,
this EMQX release is built for 24.1.5-3-aarch64-unknown-linux-gnu-64-el8
2.上传EMQX安装包
直接通过宝塔面板将文件上传到服务器上,rpm格式的安装包可以直接安装,zip格式的可以在同一个页面这直接进行文件解压。
刚刚也说了,CentOS 8已经停止服务了,yum会报错。
解决方法,直接找阿里云小智--CentOS 8 EOL如何切换源?
3.start运行
rpm安装方式,可以不用管当前所在路径,输入下面命令直接开始运行。
emqx start
zip安装方式需要,切换到bin目录,用以下方式运行。
./bin/emqx start
下面这个就表示运行成功了。
4.网页查看
因为安全组的问题,阿里云和宝塔面板都需要放行以下端口,不然无法访问页面,MQTT消息也没法发送/接收。
EMQX首页页面默认是18083端口,所以在浏览器里面输入下面的地址就行。
EMQX的首页页面。
可以设置成中文
现在没有设备连接,所以客户端界面没有显示,可以使用emqx自带的网页版本。
也可以使用MQTT.fx软件,作为一个客户端进行连接测试,首先需要配置一下服务器。
主要是配置emqx服务的ip和端口1883(不是网页页面的端口,这个是MQTT通信的端口),模拟设备的用户名(多个设备的用户名不能重复,不然会导致冲突,一个上线了另外一个就会下线),其它的默认就行,如果设置了用户和密码,需要在User Credentials里面配置。
配置完,点击Connect就可以连接了,可以看到fx001已经显示出来了。
可以在Subscribe先订阅一个主题,然后回到Publish发布一个消息。
现在是同一台电脑订阅、发布,你也可以换另外一个设备Publish发布一个aaa的消息。
订阅里面可以看到成功发布了aaa的消息。
怎么通过emqx查看是否收到消息呢?可以通过主题监控,新建刚刚的MQTT_TEST/a主题
再发送一条abc消息,可以看到消息流入是Publish界面发布的,消息流出是订阅Subscibe界面收到的。
总结
EMQX的安装和简单使用教程基本上到这就结束了,这里还存在一些问题,比如网页上是无法查看主题具体发布了什么消息,只能查看到统计数量,并且消息没有记录到数据库里面进行保存,下一节搭建一个服务器显示消息和保存数据到数据库。