Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1|回复: 0

生活常识CentOS7安装EMQX并搭建个人MQTT代理服务器 - Python现MQTT通信测试教程

[复制链接]

36万

主题

0

回帖

108万

积分

超级版主

Rank: 8Rank: 8

积分
1082619
发表于 昨天 20:10 | 显示全部楼层 |阅读模式
教程说明
本教程主要内容为使用EMQX开源免费版在Centos7服务器上搭建MQTT代理服务器并完成配置,然后通过Python代码来现利用搭建的MQTT代理服务器完成通信。如有不懂之处可在评论区询问或加群询问。

前置需求和知识
一台Centos7的云服务器(可在刻云购买服务器60元一年)、Python、了解基本的Linux命令

大致步骤
步骤1:EMQX找到系统适配的包大致步骤步骤2:下载安装启动EMQX步骤3:知晓安装位置步骤4:开放端口,访问emqx面板步骤5:配置认证步骤6:测试消息的发布和接收

步骤1:EMQX找到系统适配的包
进入EMQX?,点击右上角的Download进入下载页,如图



往下翻,可以看到EMQXOpenSource,表示这是一个开源免费的版本,点击Download,如图



然后切换到CentOSRHEL,可以看到下方列出了几条命令,这便是下载EMQX到Centos并启动的步骤,如图



步骤2:下载安装启动EMQX
上面已经看到了需要执行的命令,只需要在任意目录按照顺序依次执行命令就行了,如图



比较后一条命令是启动EMQX的,启动后可以通过执行如下命令查看emqx的状态,如图

sudosystemctlstatusemqx


步骤3:知晓安装位置
经过上面一番下载安装启动的操作,但是我们还得知道这东西安装在哪里的,不然配置都不知道去哪里改

以上的安装方式,emqx的核心文件被安装在usrlibemqx目录下,如图



配置文件默认在etcemqx目录下,如图



日志文件默认在varlogemqx目录下,如图



步骤4:开放端口,访问emqx面板
进入etcemqx目录,查看exmqconf配置文件,如图可以看到emqx的面板的端口配置的是18083,这里没有显示eqmx本身的端口,但是我们须知emqx自身的端口默认是1883。



知道了emqx端口是1883,emqx面板端口是18083,为了后续能使用emqx及其面板,我们需要开放端口

先使用如下命令列出已开启的端口,如图可以看到我这里确没有开放1883和18083端口

sudofirewall-cmd--list-all


因此分别执行如下3条命令开放1883和18083端口并重新加载防火墙

sudofirewall-cmd--permanent--add-port=18083tcp
sudofirewall-cmd--permanent--add-port=1883tcp
sudofirewall-cmd--reload
然后再查看下端口是否开放,可以看到已经开放了,如图



由于我这里使用的是刻云的服务器,还需要在平台上开放下端口(大厂的服务器安全做的高,端口有两道防护),如图直接配置就行了





然后便是访问EMQX面板

直接通过IP+18083端口的形式访问即可,账号密码默认初始为admin和public,登录后会提示修改密码,如图



步骤5:配置认证
为了安全,还是为我们的MQTT代理服务器配置个认证,不然人人都能用就完犊子了,配置流程如下

点击左边的盾牌图表-客户端认证,如图



然后点击右上角的创建按钮,为了方便使用Password方式,如图





直接使用内置数据库即可,然后账号类型配置为username,加密加盐方式随意,然后创建,如图





创建后,点击用户管道理,然后点击右边的创建按钮,添加用户即可,如图





步骤6:测试消息的发布和接收
这里使用用如下两个Python代码来测试定时发布和接收消息

发布消息测试py

importpahomqttclientasmqtt
importthreading
importtime

#MQTT代理配置
BROKER=""#IP
PORT=1883#MQTT默认端口(非加密)
TOPIC="testtopic"#要发布订阅的主题
USERNAME="幽络源站长土拨鼠"#MQTT代理服务器配置的账号
PASSWORD=""#对应的密码

#连接成功回调(新版API)
defon_connect(client,userdata,flags,reasonCode,properties=None):
ifreasonCode==0:
print("已连接到MQTT代理")
clientsubscribe(TOPIC)#订阅主题
print(f"已订阅主题:{TOPIC}")
else:
print(f"连接MQTT代理失败,响应码为:{reasonCode}")

#定时发布消息的函数
defpublish_message(client):
whileTrue:
clientpublish(TOPIC,"你好,我定时发布了一条消息",qos=1)
print("定时消息已发布")
timesleep(5)#每隔5秒发布一次消息

#创建MQTT客户端
client=mqttClient()
clientusername_pw_set(USERNAME,PASSWORD)
clienton_connect=on_connect

try:
#连接到MQTT代理
clientconnect(BROKER,PORT,60)

#启动一个线程定时发布消息
threadingThread(target=publish_message,args=(client,),daemon=True)start()

#启动络循环,保持连接
clientloop_forever()
exceptExceptionase:
print(f"Error:{e}")
订阅消息测试py

importpahomqttclientasmqtt

#MQTT代理配置
BROKER=""#IP
PORT=1883#MQTT默认端口(非加密)
TOPIC="testtopic"#要发布订阅的主题
USERNAME="幽络源站长土拨鼠"#账号
PASSWORD=""#对应的密码

#连接成功回调(新版API)
defon_connect(client,userdata,flags,reasonCode,properties=None):
ifreasonCode==0:
print("已成功连接到MQTT代理")
clientsubscribe(TOPIC)#订阅主题
print(f"已订阅主题:{TOPIC}")
else:
print(f"连接失败,响应码为:{reasonCode}")

#收到消息回调(新版API)
defon_message(client,userdata,msg,properties=None):
print(f"接收到消息:{msgpayloaddecode()}来自主题:{msgtopic}")

#创建MQTT客户端
client=mqttClient()

#设置用户和密码
clientusername_pw_set(USERNAME,PASSWORD)

#绑定回调函数
clienton_connect=on_connect
clienton_message=on_message

try:
#连接到MQTT代理
clientconnect(BROKER,PORT,60)

#启动络循环,保持连接并监听消息
clientloop_forever()
exceptExceptionase:
print(f"Error:{e}")
上面填写好你自己的IP和账号密码后,运行这两个文件,如图可以看到,发送消息的代码每5秒定时发送一条消息,并且接收消息的代码也在时的接收



结语
以上是幽络源站长原创MQTT通信搭建并测试的教程,希望对初学者(特别是从事软件者)有帮助,理解后可运用到软件+硬件的架构上。如有不懂之处可加Q群307531422询问,一起交流。



源码网的发展前景来看,未来会一直带来积极的影响。提供经过严格测试的免费源码、各种线上兼职和网络兼职的网创教程、编程及网络相关的技术教程分享,助您轻松获取资源和技术支持。https://www.youluoyuan.com/

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|足球新闻网

GMT+8, 2025-4-20 16:18 , Processed in 0.149265 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表