北冰洋以北 发表于 2024-6-19 14:11:02

搭建本身的MQTT服务器,实现装备上云(Ubuntu+EMQX)

一、EMQX先容

这篇文章教大家在ECS云服务器上部署EMQX,搭建本身私有的MQTT服务器,配置EMQX实现装备上云,装备数据转发,存储;服务器我采用的华为云的ECS服务器,体系选择Ubuntu体系。
Windows版本的看这里:
https://blog.csdn.net/xiaolong1126626497/article/details/134280836
https://img-blog.csdnimg.cn/c5b67eaebf534dfaa356e63e6983df31.png
1.1 EMQX先容

EMQX是一款大规模可弹性伸缩的云原生分布式物联网MQTT消息服务器。目前EMQX提供了:开源版和企业版。
作为全球最具扩展性的 MQTT 消息服务器,EMQX 提供了高效可靠海量物联网装备毗连,可以或许高性能实时移动与处理消息和变乱流数据,可以快速构建关键业务的物联网平台与应用。
开源版的特点: 大规模可弹性伸缩的云原生分布式物联网 MQTT 消息服务器,高效可靠毗连海量物联网装备,高性能实时处理消息与变乱流数据,助力构建关键业务的物联网平台与应用。


[*]基于 APL 2.0 开放源码协议
[*]完备 MQTT 3.1.0、3.1.1 和 5.0 规范,支持 MQTT-SN
[*]Masterless 高可用集群架构
[*]高并发、低时延、高性能
[*]可扩展的网关和插件体系
帮助文档:https://www.emqx.io/docs/zh/v5.2/getting-started/getting-started.html
EMQX 支持多种安装方式,比如容器化部署,通过 EMQX Kubernetes Operator 安装部署、或通过安装包的形式部署在物理服务器或虚拟机上,针对安装包部署形式,目前支持以下操作体系:
RedHat
CentOS
RockyLinux
AmazonLinux
Ubuntu
Debian
macOS
Linux
Windows
1.2 MQTT核心概念

MQTT(消息队列遥测传输)是物联网(Internet of Things)中最常用的轻量级消息协议。该协议基于发布/订阅(pub/sub)模式举行消息通信,答应装备和应用程序实时互换数据,使用简朴有效的消息格式,最大限度地减少网络开销并降低功耗。
作为MQTT消息平台,EMQX Enterprise为完备的MQTT消息功能提供全面支持。
1.3 发布/订阅模式

该协议是变乱驱动的,并使用发布/订阅模式毗连装备。与传统的客户端/服务器模式不同,它是一种消息传递模式,其中发送方(发布者)不直接将消息发送给特定的接收方(订阅者)。相反,发布者将消息分类为不同的主题,订阅者订阅他们感兴趣的主题。当发布者向主题发送消息时,MQTT代理路由并过滤全部传入消息,然后将其传递给对该主题表达兴趣的全部订阅者。
发布者和订阅者彼此解耦,不需要知道对方的存在。他们之间的唯连续接基于预定的消息协议。发布/订阅模式支持灵活的消息通信,由于可以根据需要动态添加或删除订阅者和发布者。它还使消息广播、多播和单播的实现更加轻易。
1.4 MQTT服务器

MQTT服务器充当发布客户端和订阅客户端之间的代理,将全部收到的消息转发给匹配的订阅客户端。因此,有时服务器被直接称为MQTT代理。
1.5 MQTT客户端

客户端是指可以使用MQTT协议毗连到MQTT服务器的装备或应用程序。它们既可以充当发布者和订阅者,也可以单独担当这两个脚色中的任何一个。在MQTT通信中,客户端可以向服务器发布消息,同时也可以订阅一个或多个主题以接收来自其他客户端的消息。通过这种方式,MQTT客户端可以或许在物联网环境中实现高效、实时的数据传输和交互。
1.6 主题与通配符

在MQTT中,主题是用于辨认和区分不同消息的,构成了MQTT消息路由的基础。发布者在发布消息时可以指定消息的主题,而订阅者可以选择订阅感兴趣的主题以接收相关消息。
为了实现一次订阅多个主题的目的,订阅者在订阅主题时可以使用通配符。MQTT提供了两种范例的主题通配符,单级通配符和多级通配符,以满足不同的订阅需求。


[*]单级通配符:用于匹配主题中的一个级别。
[*]多级通配符:用于匹配主题中的多个级别。
通过使用这两种通配符,订阅者可以灵活地订阅一系列相关的主题,而不但仅是一个具体的主题。
1.7 服务质量(QoS)

MQTT定义了三个级别的QoS,以提供不同级别的消息可靠性。每个消息在发布时可以独立设置本身的QoS。


[*]QoS 0:最多传递一次消息,可能会丢失;
[*]QoS 1:至少传递一次消息,包管到达,但可能会重复;
[*]QoS 2:准确传递一次消息,包管到达且不重复。
随着QoS级别的增加,消息传输的复杂性也增加。需要根据实际情况选择合适的QoS级别。
在选择QoS级别时,需权衡消息传递的可靠性和网络资源的消耗。例如,在网络资源有限但对消息可靠性要求不高的情况下,可以选择QoS 0;而在对消息可靠性要求较高,且能容忍肯定网络资源消耗的场景中,可以选择QoS 1或QoS 2。
二、购买ECS云服务器

2.1 登录官网

https://www.huaweicloud.com/
https://img-blog.csdnimg.cn/img_convert/b3b85b1207db08388abe7da11a52be41.png
2.2 购买ECS服务器

【1】选择ECS弹性服务器
https://img-blog.csdnimg.cn/img_convert/54543b1c8a896218c0129b287d40a945.png
【2】选择ECS服务器的区域、配置信息、操作体系(我选择的Ubuntu18.04 64位)。
https://img-blog.csdnimg.cn/img_convert/940807b6d7032a542fc736f918d94aa2.png
【3】购买弹性公网IP,配置带宽。
https://img-blog.csdnimg.cn/img_convert/76070ea7a5904ec1acd147c413a74986.png
【4】配置暗码
https://img-blog.csdnimg.cn/img_convert/1b36739039c3c24fa626260eb9f85b59.png
【5】选择购买时长,我这里选择了1个月时长
https://img-blog.csdnimg.cn/img_convert/1266ccc968a059a28200821134765cfb.png
【6】确认付费付款
https://img-blog.csdnimg.cn/img_convert/549507285726e581f2de33afde932543.png
https://img-blog.csdnimg.cn/img_convert/c1e7a40c35c1736a08db23b1dd43c8e7.png
收到邮件提醒,服务器创建成功。 (为了写教程,花费320元,买了一个月服务器)
https://img-blog.csdnimg.cn/img_convert/cc821208a2273313f48bdd0542cdd339.png
【7】返回弹性服务器的控制台
https://img-blog.csdnimg.cn/img_convert/6f45891cc078ad8dfdbfe690b5644218.png
【8】点击服务器名字,可以进入到详情页面。
https://img-blog.csdnimg.cn/img_convert/d8b05f73532c0c69ae3b4bc984588b90.png
2.3 配置安全组

要确保MQTT服务器常用的几个端口已经开放出出来。
https://img-blog.csdnimg.cn/img_convert/7c056661a21d43f72d6a8cadd355b48e.png
2.4 安装FinalShell

Windows下安装 FinalShell 终端,方便使用SSH协议远程登录到云服务器。 (当然,使用其他方式登录也是一样的)
https://img-blog.csdnimg.cn/img_convert/6f8937007caef9abb6d116e28d4ce4e7.png
2.5 远程登录到云服务器终端

【1】新建毗连,选择SSH毗连。
https://img-blog.csdnimg.cn/img_convert/00ff15e00b65b9b5f77e1e2bc01e5a0a.png
【2】填入IP地址、用户名、暗码
这里的主机就是填服务器的公网IP地址,暗码就是创建服务器输入的暗码,用户名直接用root。
https://img-blog.csdnimg.cn/img_convert/4f14785353f800b977bdf2b349ad3cf8.png
【3】点击毗连服务器
https://img-blog.csdnimg.cn/img_convert/b0a4ac79cfaf9521228896230f30056a.png
【4】第一次登录会弹出提示框,选择担当并保存
https://img-blog.csdnimg.cn/img_convert/27a02f61336a75e6d9b838ee119b024e.png
【5】接下来可以看到服务器已经登录成功了。
https://img-blog.csdnimg.cn/img_convert/c1af22547ef30dfb0bfe983ea7d8e070.png
二、Linux下安装EMQX

本章节将先容如安在 Ubuntu 体系中下载安装并启动 EMQX。
支持的 Ubuntu 版本:


[*]Ubuntu 22.04
[*]Ubuntu 20.04
[*]Ubuntu 18.04
2.1 官网地址

链接:https://www.emqx.io/docs/zh/v5.2/deploy/install-ubuntu.html
2.2 通过Apt源安装

EMQX 支持通过 Apt 源安装,免除了用户需要手动处理依赖关系和更新软件包等的困扰,具有更加方便、安全和易用等优点。
在命令行终端,复制下面的命令过去,按下回车键。
【1】通过以下命令配置 EMQX Apt 源:
curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
【2】运行以下命令安装 EMQX:
sudo apt-get install emqx
【3】运行以下命令启动 EMQX:
sudo systemctl start emqx
过程如下:
https://img-blog.csdnimg.cn/img_convert/5e820c88d0efd67487789bc155ae7fe6.png
https://img-blog.csdnimg.cn/img_convert/5bee9db3d7e492199a7203d5006dfd20.png
2.3 EMQX常用的命令

sudo systemctl emqx start    启动
sudo systemctl emqx stop   停止
sudo systemctl emqx restart重启
三、配置EMQX服务器

3.1 登录EMQX内置管理控制台

EMQX 提供了一个内置的管理控制台,即 EMQX Dashboard。方便用户通过 Web 页面就能轻松管理和监控 EMQX 集群,并配置和使用所需的各项功能。
在欣赏器里输入: http://122.112.225.194:18083 就可以访问EMQX的背景管理页面。可以管理以毗连的客户端或检查运行状态。
这里面的IP地址,就是本身ECS云服务器的公网IP地址。
打开欣赏器后,输入地址后打开的效果:
https://img-blog.csdnimg.cn/img_convert/54f40f1b783d7f13752e250c420a1ccd.png
默认用户名和暗码:
用户名:admin
密码:public
第一次登录会提示你修改新暗码,如果不想设置,也可以选择跳过(公网服务器部署,还是要修改暗码安全些)。
下面修改新暗码:
https://img-blog.csdnimg.cn/img_convert/802c40978c418128b4561f71a07fadf4.png
登录成功的页面显示如下:
https://img-blog.csdnimg.cn/img_convert/17cc923d9dc8d1032119972afa242a92.png
3.2 MQTT配置

这里可以配置MQTT的一些参数,根据本身的需求举行配置。
https://img-blog.csdnimg.cn/img_convert/6da184cd2dd48a13eccd6bb2cd1c5175.png
3.3 测试MQTT通信

新建一个客户端,点击毗连。
https://img-blog.csdnimg.cn/img_convert/e567a10945a06e53a7fa9a4f8822488a.png
毗连之后,然后点击订阅,和发布,如果下面消息能正常的接收。分析MQTT服务器通信是已经正常,没问题了。
而且在这个页面也可以看到主题发布和主题订阅的格式。
https://img-blog.csdnimg.cn/img_convert/4b3bfc09e3cce37d052bd0375ae6de4f.png
3.4 MQTT客户端登录服务器测试

接下来就打开我们本身的MQTT客户端登录MQTT服务器举行测试数据的通信。
端口选择: 1883
根据软件参数填入参数,登录,举行主题的发布和订阅。
https://img-blog.csdnimg.cn/img_convert/aca7714709b5b5757342b73b4fbd09bc.png
分析: 目前还没有配置客户端认证,现在只要IP和端口输入正确,MQTT三元组可以随便输入,都可以登录上服务器的,服务器没有对三元组做校验。
EMQ X 默认配置中启用了匿名认证,任何客户端都能接入 EMQX。没有启用认证插件或认证插件没有显式答应/拒绝(ignore)毗连哀求时,EMQX 将根据匿名认证启用情况决定是否答应客户端毗连。
然后打开EMQX的管理背景,可以看到我们的装备已经登录服务器了,名字为test1。
https://img-blog.csdnimg.cn/img_convert/b07575602ca0eef5b2032110b1ed85e5.png
在订阅主题的页面也可以看到我们客户端装备订阅的主题。
https://img-blog.csdnimg.cn/img_convert/5f50203c21678db8c1f540df1e3d0253.png
3.5 客户端认证配置

EMQX 默认配置中启用了匿名认证,任何客户端都能接入 EMQX。没有启用认证插件或认证插件没有显式答应/拒绝(ignore)毗连哀求时,EMQX 将根据匿名认证启用情况决定是否答应客户端毗连。
在正式产品里肯定是要启用认证的,不然任何装备都能接入。
下面就先容如何配置 客户端认证。
【1】打开客户端认证页面
https://img-blog.csdnimg.cn/img_convert/fbde10ba3176eb5a3b0ea29f3ebf9c0b.png
【2】选择暗码认证
https://img-blog.csdnimg.cn/img_convert/74f20041d511c743a28763499e62cf8a.png
【3】选择内置数据库
https://img-blog.csdnimg.cn/img_convert/2c3cc10d8a3cac9dbf3f73417978bd7d.png
【4】设置认证方式(都可以默认,不用改),直接点击创建。
https://img-blog.csdnimg.cn/img_convert/a4163964c369c2ccdee56b5b870ba6ab.png
【5】创建成功后,点击用户管理
https://img-blog.csdnimg.cn/img_convert/654223f11c581f7b9b0d6cf6e920b795.png
【6】添加用户
https://img-blog.csdnimg.cn/img_convert/70472bc40273bb1d6bef9dac1526e7bf.png
https://img-blog.csdnimg.cn/img_convert/28e0fb336227107374c1f4d559627d43.png
【7】添加成功
https://img-blog.csdnimg.cn/img_convert/95faff0b1ebb963857ea88f5cf959445.png
【8】添加完毕之后,打开MQTT客户端可以举行测试。
登录的时间,MQTT用户名和暗码必须输入正确,按照上一步添加的信息举行如实填写,否则是无法登录服务器的。
https://img-blog.csdnimg.cn/img_convert/614057e4a3ad66211ab9620d65a61f66.png
3.6 客户端授权配置

客户端授权页面可以配置每个客户端(装备)的主题发布,订阅权限。限制它是否可以发布主题,订阅主题。 如果有需要就可以举行配置。
http://127.0.0.1:18083/#/authorization/detail/built_in_database?tab=users
【1】创建数据源
https://img-blog.csdnimg.cn/img_convert/acb2b5f1a89b96b2fe5cad565f590738.png
【2】选择内置数据库
https://img-blog.csdnimg.cn/img_convert/1ab6f3562359f6192392363871cfb733.png
【3】完成创建
https://img-blog.csdnimg.cn/img_convert/03d4dded98cfe2e0137f98424d28bbc6.png
【4】点击权限管理
https://img-blog.csdnimg.cn/img_convert/4b36d08a9d0dac8ed47debd4aeb9b337.png
【5】选择客户端ID,点击添加
https://img-blog.csdnimg.cn/img_convert/c1bf2257cc53708414b3c2dafc90766c.png
【6】配置权限
https://img-blog.csdnimg.cn/img_convert/57c56d1279b82f4f1119e26f7dc02c46.png
3.7 数据转发(集成)

在集成选项里,可以对装备数据处理。 比如:转发到本身的HTTP服务器,转发到本身其他的MQTT服务器,创建规则,某些变乱触发某些动作等等。
https://img-blog.csdnimg.cn/img_convert/2d7aad8dffaaf335a9f2378af73c4941.png
选择数据桥接。
可以把数据发送端本身的HTTP服务器,大概发送到其他的MQTT服务器。
https://img-blog.csdnimg.cn/img_convert/a71e9b262c8fbf5a4998e1a473d64b60.png
选择HTTP服务 (如果本身有HTTP服务器,可以将数据转发给本身的HTTP服务器)。
https://img-blog.csdnimg.cn/img_convert/1e1be6ead8529f20bdd90ecf15baecbb.png
四、MQTT客户端消息互发测试

4.1 添加2个装备

为了方便测试装备间相互订阅主题,数据收发,在客户端认证页面至少添加2个装备。我这里分别添加了test1和test2。
https://img-blog.csdnimg.cn/img_convert/dba1c818582c6291a04ea459407f6e53.png
4.2 装备间测试

装备A订阅装备B的主题,装备B订阅装备A的主题,实现数据互发。
https://img-blog.csdnimg.cn/img_convert/cebbd1b561599c16ae6d05de7786c01f.png
装备A的MQTT信息:
MQTT服务器地址:122.112.225.194
MQTT服务器端口号:1883
MQTT客户端ID:AAA
MQTT用户名:test1
MQTT登录密码:12345678

订阅主题:BBB/#
发布主题:AAA/1
发布的消息:{ "msg": "我是AAA设备" }
装备B的MQTT信息:
MQTT服务器地址:122.112.225.194
MQTT服务器端口号:1883
MQTT客户端ID:BBB
MQTT用户名:test2
MQTT登录密码:12345678

订阅主题:AAA/#
发布主题:BBB/1
发布的消息:{ "msg": "我是BBB设备" }
4.3 MQTT实时图传测试

下面演示,利用MQTT协议举行图像传输。
这是打包好的APP,0积分可以下载,下载下来就可以测试图传:
https://download.csdn.net/download/xiaolong1126626497/88512661
这是MQTT协议图传上位机的Qt源码,如果需要源码的可以到这里下载:
https://download.csdn.net/download/xiaolong1126626497/87614468
这是Qt的工程,利用Qt开发的图传软件,分别为发送端和接收端。
下面演示,利用MQTT协议举行图像传输。
https://img-blog.csdnimg.cn/img_convert/ef6068c83e6d4450e0bf36f874fbf6ee.png
这是Qt的工程,利用Qt开发的图传软件,分别为发送端和接收端。
https://img-blog.csdnimg.cn/img_convert/ae0a003734eb2226c7831c822b1298ef.png
运行效果: 举行图传效果是非常的好。 报文最大一次可以发送 256MB
https://img-blog.csdnimg.cn/img_convert/639761f48a1fd58c3798302ce759a27d.png
五、单片机装备上云

只要是MQTT客户端能正常上云通信了,那么单片机也是一样的。
上位机也可以采用MQTT协议接入服务器,订阅装备的主题,就可以实时接收装备的消息(当然,也可以采用HTTP协议接入)。
六、数据桥接

EMQX支持将装备上传的数据转发到其他地方,比如,本身的HTTP服务器。方便本身服务器举行其他的处理。
通过数据桥接,用户可以实时地将消息从 EMQX 发送到外部数据体系,大概从外部数据体系拉取数据并发送到 EMQX 的某个主题。而 EMQX Dashboard 提供了可视化创建数据桥接的本事,只需在页面中配置相关资源即可。
本章节就先容如何搭建本身的HTTP服务器。配置EMQX转发数据到本身的HTTP服务器,保存处理数据。
6.1 搭建HTTP服务器

我这里直接使用python写代码搭建一个HTTP服务器。 ECS服务器上默认没有安装python3,需要先安装一下。
【1】安装python3
root@emqx:~/emqx# apt install python3
Reading package lists... Done
Building dependency tree      
Reading state information... Done
python3 is already the newest version (3.6.7-1~18.04).
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
【2】编写代码
from flask import Flask, json, request

app = Flask(__name__)

@app.route('/', methods=['POST'])
def print_messages():
reply= {"result": "ok", "message": "success"}
print("got post request: ", request.get_data())
return json.dumps(reply), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)
将以上代码保存到一个名为 server.py 的文件中。
这段代码创建了一个使用 Flask 框架的 Web 服务器,可以接收根路径的 POST 哀求。当接收到 POST 哀求时,服务器会将哀求的数据打印到终端,并返回一个 JSON 格式的相应给客户端。服务器将在本地运行,并监听默认的 8000 端口。
【3】运行程序
# 安装 flask 依赖
pip install flask
pip3 install flask
   
# 启动服务
python3 server.py
在命令行中执行 python3 server.py,就可以启动一个简朴的HTTP服务器,可以接收并处理POST哀求。当有POST哀求发生时,服务器将返回收到的POST数据。可以根据本身的需要,进一步扩展处理POST哀求的逻辑。
**运行示例: ** (代码可以在本地写好上传到服务器,也可以直接 vim server.py 打开编辑器直接编写 )
https://img-blog.csdnimg.cn/img_convert/19432e4fa15e308e428dc775d76db6f0.png
可以通过发送 POST 哀求到 http://your-server-ip:8000/ 的方式来测试这个服务器。
比如:
http://122.112.225.194:8000/
6.2 数据转发配置

【1】在集成选项里,可以对装备数据处理,将数据转发到本身的HTTP服务器。
https://img-blog.csdnimg.cn/img_convert/9e3de2dbcf31b94e4f3fe75fba4c5d0f.png
【2】选择Webhook。
Webhook,使用 Webhook 来转发数据到 HTTP 服务;
使用 Webhook 实在就是将 EMQX 接收并处理后的数据发送到一个 HTTP 服务上,再根据预设好的 HTTP 服务来处理和集成业务数据。
同样用户需要有一个预先搭建好的 HTTP 服务,需要在配置信息页面填写 HTTP 哀求的服务地址,选择一个哀求方法 POST、GET、PUT 或 DELETE,配置哀求头,将需要发送的数据使用模板语法填写到哀求体(body)中即可。
https://img-blog.csdnimg.cn/img_convert/07a84fcbe5df4710aa4529d8edef4347.png
【3】选配置Webhook
触发器选择全部消息和变乱,URL里填本身的服务器地址。
https://img-blog.csdnimg.cn/img_convert/ffe22a93e48df6310b84d9086972e479.png
【4】点击测试。 测试服务器是否OK。
https://img-blog.csdnimg.cn/img_convert/711737d3156678a2f4334a508a29bf55.png
【6】没问题就直接点击保存
https://img-blog.csdnimg.cn/img_convert/ea6d3107f9864194ca05fd373b601953.png
【7】创建成功
https://img-blog.csdnimg.cn/img_convert/5790a8610446877cacbd1b42cbaa7c93.png
【8】保存之后。 会自动创建规则和数据桥接。 非常方便。
https://img-blog.csdnimg.cn/img_convert/b62d94ad099228b5aa3552d66e58f85b.png
https://img-blog.csdnimg.cn/img_convert/5e121de5737761bd1a608c946798e5f1.png
https://img-blog.csdnimg.cn/img_convert/3e72d974fe06d0b343be594b15525ae2.png
6.3 测试转发效果

【1】打开MQTT客户端,发送数据测试。
https://img-blog.csdnimg.cn/img_convert/18aa9761113aae8166dccbdafa0721cd.png
【2】看python服务器的终端,可以看到收到了EMQX服务器转发过来的数据。
如果本身接下来想要举行其他的操作,服务器写代码举行对应的处理即可。
https://img-blog.csdnimg.cn/img_convert/e9472f906a8b82438bce057e599a27a1.png
【3】 点击这个服务可以看到已经触发转发的详情。
https://img-blog.csdnimg.cn/img_convert/30238f2ed4e54eb13650f9feeea086d7.png
https://img-blog.csdnimg.cn/img_convert/bb962cc716bd0ac141a746079456233a.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 搭建本身的MQTT服务器,实现装备上云(Ubuntu+EMQX)