引言
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。
EMQ是国人开源的高性能MQTT服务端,支持百万级连接
Emq官网提供了Linux,Windows,Mac的原生安装包,这里我们通过Docker搭建
镜像获取方式:
- Emq官网下载,通过docker的load命令导入
- Emq官方QingCloud镜像
- 阿里云镜像
具体步骤
1.拉取镜像
这里选择阿里云镜像
可以直接通过docker命令拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/synbop/emqttd:2.3.6
2.运行镜像
docker run --name emq -p 18083:18083 -p 1883:1883 -p 8084:8084 -p 8883:8883 -p 8083:8083 -d registry.cn-hangzhou.aliyuncs.com/synbop/emqttd:2.3.6
镜像配置说明:
- 防火墙开启1883(MQTT)
- 8083(WebSocket)
- 18083(Dashboard控制台)端口
- Dashboard 控制台,默认管理员: admin, 密码: public
- 在浏览器中输入 http:192.168.99.100:18083进入Web控制台,用户名:admin 密码:public
映像默认允许1万线 MQTT 连接,最大可配置到10万线。映像内存占用: 5万连接/1G内存(from官方文档)
3.发布
因为mqtt本身是发布订阅模型,
这里我们使用python作为服务端发布(主要是简单😊),需要引入paho包
import paho.mqtt.client as mqtt
HOST = "127.0.0.1"�
PORT = 1883
def pub():
client = mqtt.Client()
client.connect(HOST, PORT, 60)
client.publish("chat", "hello", 2) # 发布一个主题为'chat',内容为‘hello liefyuan’的信息
client.loop_forever()
if __name__ == '__main__':
pub()
4.订阅
依旧先上python代码
import paho.mqtt.client as mqtt
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("chat")
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
if __name__ == '__main__':
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("127.0.0.1", 1883, 60)
client.loop_forever()
5.测试
- 先运行订阅代码
查看web端的Dashboard
- 然后运行发布代码
后记
MQTT作为物联网开源协议,同时支持高质量的Qos,可以用在大部分物联网通信场景,进行APP定位,消息推送等功能,下面的文章我会接入kafka来进行物联网消息推送,并通过kafka进行聚合、采集消息。