一、简介
MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。
MQTT传输的消息分为主题Topic和负载payload,当订阅指定的Topic后,就会收到该Topic下的消息内容payload。
二、mosquitto使用
安装
https://mosquitto.org/download/
windows:
linux:
apt install mosquitto
开启broker
C:\Program Files\mosquitto>mosquitto.exe --help
C:\Program Files\mosquitto>mosquitto.exe -p 5555 -v
开启Subscriber
指定broker并指定"test"的topic进行订阅
C:\Program Files\mosquitto>mosquitto_sub.exe --help
C:\Program Files\mosquitto>mosquitto_sub.exe -h 127.0.0.1 -p 5555 -t "test"
使用Publisher发送消息
指定"test"的topic发送payload为123的消息:
C:\Program Files\mosquitto>mosquitto_pub.exe --help
C:\Program Files\mosquitto>mosquitto_pub.exe -h 127.0.0.1 -p 5555 -t "test" -m "123"
此时的Subscriber:
三、解决TLS证书问题
使用mosquitto_sub时,因为tcp传输问题不成功:
原因是证书问题,导致TCP握手并不成功,图为携带证书后的结果:
为解决该问题,首先pip安装如下库:
pip3 install paho-mqtt
使用如下代码:
import ssl
import paho.mqtt.client as mqtt# 定义回调函数,处理接收到的消息
def on_message(client, userdata, msg):print(f"Topic: {msg.topic}, Message: {msg.payload.decode('utf-8')}")# 定义回调函数,处理连接事件
def on_connect(client, userdata, flags, rc):print("Connected with result code " + str(rc))# 订阅主题client.subscribe("your/topic")# 创建 MQTT 客户端
client = mqtt.Client()
# 设置连接和消息回调函数
client.on_connect = on_connect
client.on_message = on_message
# 禁用证书认证
client.tls_set(ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_NONE, tls_version=ssl.PROTOCOL_TLS, ciphers=None)
# 连接到 MQTT 代理服务器
client.connect("your_host_address", 8883, 60)
# 开始处理消息循环
client.loop_start()# 保持连接
while True:pass# 停止消息循环
client.loop_stop()# 断开与 MQTT 代理服务器的连接
client.disconnect()
结果成功订阅: