通过镜像搭建 mqtt 服务
1)从dockerhub下载镜像
docker pull eclipse-mosquitto
2)创建相应目录
mkdir -p /mosquitto/config
mkdir -p /mosquitto/data
mkdir -p /mosquitto/log
3)初始化配置文件
cat > /mosquitto/config/mosquitto.conf << EOF
listener 1883
allow_anonymous true
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
EOF
4)修改权限
chmod -R 755 /mosquitto
5)启动MQTT服务端镜像
docker run -itd --name=mosquitto \
--privileged -p 1883:1883 -p 9001:9001 \
-v /mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf \
-v /mosquitto/data:/mosquitto/data \
-v /mosquitto/log:/mosquitto/log \
eclipse-mosquitto
6)启动订阅信息
docker run -it --name=mosquitto_sub --privileged eclipse-mosquitto sh
进入到容器后执行命令,server_ip填上面启动服务端的IP地址,topic填要订阅的主题
mosquitto_sub -h server_ip -p 1883 -u root -P root -t topic
用python脚本链接mqtt
服务端
import random
from paho.mqtt import client as mqtt_client
from queue import Queue
broker = '192.168.12.123'
port = 1883
topic = "test"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 100)}'
def connect_mqtt() -> mqtt_client:
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)
client = mqtt_client.Client(client_id)
# client.username_pw_set("root", "root")
client.on_connect = on_connect
client.connect(broker, port)
return client
def subscribe(client: mqtt_client):
def on_message(client, userdata, msg):
messa = msg.payload.decode()
topic = msg.topic
print(f"Received `{messa}` from `{topic}` topic")
client.subscribe(topic)
client.on_message = on_message
def run():
client = connect_mqtt()
subscribe(client)
client.loop_forever()
if __name__ == '__main__':
run()
客户端
# python 3.6
import random
import time
from paho.mqtt import client as mqtt_client
broker = '192.168.12.123'
port = 1883
topic = "test"
# generate client ID with pub prefix randomly
client_id = f'python-mqtt-{random.randint(0, 1000)}'
# client_id = f'python-mqtt-{"你好你是水11111"}'
def connect_mqtt():
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)
client = mqtt_client.Client(client_id)
client.on_connect = on_connect
client.connect(broker, port)
return client
def publish(client):
msg_count = 0
while True:
time.sleep(1)
# msg = f"messages: {msg_count}"
msg = f"messages: '你好 啊啊啊啊啊啊'"
result = client.publish(topic, msg)
# result: [0, 1]
status = result[0]
if status == 0:
print(f"Send `{msg}` to topic `{topic}`")
else:
print(f"Failed to send message to topic {topic}")
msg_count += 1
def run():
client = connect_mqtt() # 链接
client.loop_start()
publish(client)
if __name__ == '__main__':
run()