一、下載依賴包
pip install paho-mqtt
二、創建監聽訂閱和發布
import paho.mqtt.client as mqtt
import json
import time
host = '127.0.0.1' # mqtt服務器地址
port = 1883
client_id = '101' # 客戶端id,自己設置
# 同時訂閱多個主題方式使用#通配符
# '#'號是通配符,訂閱匹配#平級及子級主題的所有主題
# '+'號是單層通配符,在主題過濾器的任意層級都可以使用單層通配符,包括第一個和最后一個層級。然而它必須占據過濾器的整個層級。可以在主題過濾器中的多個層級中使用它,也可以和多層通配符一起使用。
# 消息服務質量,0最多一次,1最少一次,2只一次
def on_connect(client, userdata, flags, rc):
'''
訂閱信息
:param client: 鏈接
:param userdata:
:param flags:
:param rc:
:return:
'''
print('鏈接-----------------------------')
print(f'Connected with result code {rc}---鏈接結束-------------')
client.subscribe('data/send')
pass
def on_message(client, userdata, msg):
'''
消息主題
:param client:
:param userdata:
:param msg:
:return:
'''
print('信息-------------------------------')
print(f'主題:{msg.topic} 消息:{msg.payload.decode("utf-8")}------信息結束-------')
pass
def on_subscribe(client, userdata, mid, granted_qos):
'''
消息狀態
:param client:
:param userdata:
:param mid:
:param granted_qos:
:return:
'''
print('狀態--------------------------')
print(client)
print(userdata)
print(mid)
print(f'On Subscribed: qos = {granted_qos}---------狀態結束--------')
pass
def on_disconnect(client, userdata, rc):
if rc != 0:
print(f'Unexpeced disconnection {rc}--disconnect')
pass
pass
data = {
"type": 2,
"timestamp": time.time(),
"messageId": "gajisrwa-fdsarakm-fdas",
"command": "xx/recommend",
"data": {
"openId": "xxxx",
"appId": 1001,
"recommendType": "temRecommend"
}
}
param = json.dumps(data)
client = mqtt.Client(client_id)
client.username_pw_set("admin", "public")
client.on_connect = on_connect
client.on_message = on_message
client.on_subscribe = on_subscribe
client.on_disconnect = on_disconnect
client.connect(host, port, 60)
client.subscribe("data/send")
client.publish("data/send", payload=param, qos=0) # 發送消息
# print(client.loop_read())
# print(client.loop_write())
# print(client.subscribe('data/send', qos=0))
client.loop_forever()

import sys
import paho.mqtt.publish as publish
import paho.mqtt.subscribe as subscribe
# 發布信息
publish.single('data/send', '{"hello":2}', hostname='127.0.0.1')
