当前位置:首页 » 《随便一记》 » 正文

Python Mqtt 二次封装与模块化开发_qq_23607397的博客

23 人参与  2022年03月13日 14:50  分类 : 《随便一记》  评论

点击全文阅读


使用pip安装封装好的DXR插件

pip install DXR

安装完成后会得到两个包分别为Dxr_mqtt以及Dxr_log,使用下列方式导入包内所有函数,也可以单独引用相应内容

from Dxr_mqtt.dxr_mqtt_2 import *
from Dxr_mqtt.dxr_mqtt import *
from Dxr_log.log import *

dxr_mqtt以及dxr_mqtt_2区别在于2使用了qos为2的方式进行发布话题和订阅话题,dxr_mqtt使用qos为0的方式进行发布话题和订阅话题,可以根据业务具体需求进行选择

MQTT设计了一套保证消息稳定传输的机制,包括消息应答、存储和重传。在这套机制下,提供了三种不同层次QoS(Quality of Service):

  • QoS0,At most once,至多一次;
  • QoS1,At least once,至少一次;
  • QoS2,Exactly once,确保只有一次。

QoS 是消息的发送方(Sender)和接受方(Receiver)之间达成的一个协议:

  • QoS0 代表,Sender 发送的一条消息,Receiver 最多能收到一次,也就是说 Sender 尽力向 Receiver 发送消息,如果发送失败,也就算了;
  • QoS1 代表,Sender 发送的一条消息,Receiver 至少能收到一次,也就是说 Sender 向 Receiver 发送消息,如果发送失败,会继续重试,直到 Receiver 收到消息为止,但是因为重传的原因,Receiver 有可能会收到重复的消息;
  • QoS2 代表,Sender 发送的一条消息,Receiver 确保能收到而且只收到一次,也就是说 Sender 尽力向 Receiver 发送消息,如果发送失败,会继续重试,直到 Receiver 收到消息为止,同时保证 Receiver 不会因为消息重传而收到重复的消息。

 dxr_mqtt包类和方法的介绍,(dxr_mqtt_2一致,只是qos不一样)

# setServerUrl(选用)
# 用于设置mqtt连接的服务器,
# 默认url为127.0.0.1,默认clientID为随机时间戳,
# 根据也无需要进行相应修改
setServerUrl('xx.xx.xx.xx', clientID='server')
# dxr_mqtt_2中方法为以下方法内容,后续所有方法都相似,方法名+'_2'
# clientID 不能和上面一样,会有冲突
setServerUrl_2('39.101.69.111', clientID='server_2')
# 设置是否打印mqtt日志,默认为False
# setMqttLog(False)
# Dxr_Publisher(消息发布者)
# 申请一个消息发布者后
# 可以直接使用发布至调用publish方法进行话题发布
dxr_publish = Dxr_Publisher('/cmd_vel')
# 直接使用publish方法进行消息发布(消息为json对象)
dxr_publish.publish({
    "op": "test",
    "cmd": '/test',
    "msg": {
        "test": 'test'
    }
})
# 订阅消息回调方法
def callback_test1(msg):
    print('test1', msg)
# 申明一个订阅者
# topic 订阅一个话题
# callback 定义一个回调函数用于接受话题消息
dxr_subscriber = Dxr_Subscriber('/test1', callback=callback_test1)

dxr_log包类和方法的介绍

# log存放在项目下的log文件加下,log文件夹不存在会自动创建文件夹
# 第一个版本还无法设置日志存储时长,目前为3天一覆盖,后续会更新
# 设置相应类型日志是否打印在终端
setLogPrint(info=True, debug=True, error=True)
# 日志存储在all.log中
print_info('test')
# 日志存储在debug.log中
print_debug('test')
# 日志存储在error.log以及all.log中
print_error('test')

其它介绍,上篇文章有介绍如何安装mosquitto,本篇会讲解下如何使用mosquitto查看DXR插件包中订阅和发布的相应客户端

root@iZzpmczawpjrqvZ:~# mosquitto_sub -t /topic/#

server_pub:

/cmd_vel

/test2

/test3

server_sub:

/test1

/test2

/test3

server_2_pub2:

/test4

/pub_test2

 使用mosquitto_sub -t /topic/#查看所有正在发布和订阅者发布和订阅的话题类型

也可以使用mosquitto_sub -t /topic/<client_id> (client_id为订阅发布这的client_id)来查看特定发布者发布和订阅的话题

如果发布者意外掉线后,发布和订阅的话题会被清空,也可以根据这个方式来检验发布订阅者程序是否正常运行

根据上述查看到的话题使用mosquitto_sub -t <topic>查看具体话题发布的消息

也可以使用mosquitto_pub -t <topic> -m <msg>消息内容来发布一条测试消息给相应话题


点击全文阅读


本文链接:http://zhangshiyu.com/post/36143.html

消息  话题  发布  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1