Ubuntu20.04云服务器——EMQX部署
1. EMQX容器部署
-
获取Docker镜像
sudo docker pull emqx/emqx:5.0.26
-
创建docker-compose.yml文件
version: '3' services: emqx1: image: emqx:5.0.26 container_name: emqx1 restart: always ports: - 1883:1883 - 8083:8083 - 8084:8084 - 8883:8883 - 18083:18083
-
通过Docker Compose创建EMQX容器
sudo docker-compose -f docker-compose.yml up -d
-
也可以通过docker直接创建EMQX容器
sudo docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.0.26
-
web端访问emqx
http://x.x.x.x:18083 用户名:admin 密码:public
-
设置新密码
-
点击用户管理,新建用户
用户名:user1 备注:用户 密码:user1user1
2. 使用Python SDK连接测试
-
下载mqtt库
pip install paho-mqtt -i https://pypi.tuna.tsinghua.edu.cn/simple
-
服务端示例
# coding: UTF-8 import time import paho.mqtt.client as mqtt import datetime def on_publish(msg, rc): # 成功发布消息的操作 if rc == 0: print("publish success, msg = " + msg) def on_connect(client, userdata, flags, rc): # 连接后的操作 0为成功 print("Connection returned " + str(rc)) user = "user1" # 用户名 pwd = "user1user1" # 密码 endpoint = "x.x.x.x" # 连接地址 port = 1883 # 1883为服务端口号,如果是安全认证,端口号需要修改为1884 topic = "test1" # 发布消息主题 client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) client = mqtt.Client(client_id) # ClientId不能重复,所以使用当前时间 client.username_pw_set(user, pwd) # 设置用户名,密码 client.connect(endpoint, port, 60) # 连接服务 keepalive=60 client.on_connect = on_connect # 连接后的操作 client.loop_start() time.sleep(2) count = 0 while count < 5: # 发布五条消息 count = count + 1 msg = str(datetime.datetime.now()) rc, mid = client.publish(topic, payload=msg, qos=1) # qos on_publish(msg, rc) time.sleep(2)
-
客户端示例
# coding: UTF-8 import paho.mqtt.client as mqtt import time def on_connect(client, userdata, flags, rc): print("Connected with result code " + str(rc)) # 打印连接状态 client.subscribe("test1") # 填写订阅的主题 def on_message(client, userdata, msg): print(msg.topic + " " + ":" + str(msg.payload)) # 打印接受的消息 client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) # 以当前时间作为client_id client = mqtt.Client(client_id) # ClientId不能重复,所以使用当前时间 client.username_pw_set("user1", "user1user1") # 设置连接用户和密码,必须设置,否则会返回Connected with result code 4 client.on_connect = on_connect client.on_message = on_message client.connect("x.x.x.x", 1883, 60) # 1883为服务端口号,如果是安全认证,端口号需要修改为1884 client.loop_forever()