百万级并发EMQ的Docker搭建和使用

2,451 阅读2分钟

引言

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。

EMQ是国人开源的高性能MQTT服务端,支持百万级连接

Emq官网提供了Linux,Windows,Mac的原生安装包,这里我们通过Docker搭建

镜像获取方式:

  1. Emq官网下载,通过docker的load命令导入
  2. Emq官方QingCloud镜像
  3. 阿里云镜像

具体步骤

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

可以看到已经出现了这个chat主题,而且客户端的连接也已经建立了

  • 然后运行发布代码

已经收到了消息,现在打开Dashboard也可以看到连接数从1变成了2,并且出现了sent和receive事件

后记

MQTT作为物联网开源协议,同时支持高质量的Qos,可以用在大部分物联网通信场景,进行APP定位,消息推送等功能,下面的文章我会接入kafka来进行物联网消息推送,并通过kafka进行聚合、采集消息。