1.EMQX是什么?
EMQX 是一款开源的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条,单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息,并保证延迟在亚毫秒级。
EMQX 支持多种协议,包括 MQTT (3.1、3.1.1 和 5.0)、HTTP、QUIC 和 WebSocket 等,保证各种网络环境和硬件设备的可访问性。EMQX 还提供了全面的 SSL/TLS 功能支持,比如双向认证以及多种身份验证机制,为物联网设备和应用程序提供可靠和高效的通信基础设施。
内置基于 SQL 的规则引擎,EMQX 可以实时提取、过滤、丰富和转换物联网数据。此外,EMQX 采用了无主分布式架构,以确保高可用性和水平扩展性,并提供操作友好的用户体验和出色的可观测性。
EMQX 拥有来自 50 多个国家的 20,000 多家企业用户,连接全球超过 1 亿台物联网设备,服务企业数字化、实时化、智能化转型。
2.Docker方式安装部署及配置
EMQX有Cloud Serverless版、Cloud 专有版、开源版、 企业版,这里部署的是开源版,因为开源版是免费的,部署方式有:Windows/各个Linux发行版/Docker/Docker-compose/Kubernetes(也支持国内外的云环境,具体参看官方文档) 的方式,可见部署方式丰富,这里才有Docker的方式可以快速的将这个EMQX部署本耍起来(本文采用的是windows10专业版安装的docker-Desktop,在windows安装docker前面的文章也有分享,可以去观看下),至于生产的部署方式可以参看官方的文档选择适合自己的部署方式,如何组建EMQX集群,官方文档也有文档,搭建集群环境外加一个负载均衡就实现了高可用,docker方式请参看下面的步骤。
2.1Docker部署redis
docker run --privileged=true -d --name=redis -p 6379:6379 --restart=always -v D:\redis\data:/data -v D:\redis\conf:/usr/local/etc/redis -v D:\redis\log:/var/log/redis redis --appendonly yes --requirepass 123456
redis.conf挂载文件内容如下:
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
requirepass 123456
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
挂载文件路径:
上面的redis的本地docker部署亲测有效,这里为什么需要安装redis呢?因为EMQX的客户端需要将客户端的用户名和密码持久化到redis中,这里的持久化方式我们选择的是redis,官方提供的持久化方式也比较多,可以去官网看文档
#redis方式认证:
https://www.emqx.io/docs/zh/v5.2/access-control/authn/redis.html
我们这里使用的是redis的单机版本,还支持redis的 Sentinel、Cluster的方式,密码加密采用:sha256,使用RedisInsight客户端连接工具连接上redis
创建两个EMQX的客户端的账号和密码,命令如下:
HSET mqtt_user:zlf1 is_superuser 1 salt 盐值 password_hash 密码加盐sha256密文
HSET mqtt_user:zlf2 is_superuser 1 salt 盐值 password_hash 密码加盐sha256密文
sha256hash在线加盐加密,用于生成sha256hash加盐加密的密码:
https://www.bchrt.com/tools/sha256hash/
这里在redis的0号库里面创建了两个EMQX的用户:zlf1和zlf2,两个用户的密码可以使用上面的那个在线生成密文,明文密码后面集成的时候会用到客户端的账号和密码
2.2部署EMQX
先不挂载启动:
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.4.1
将 /opt/emqx/etc 目录下的文件复制到宿主机下
然后重启删除容器,使用挂载的方式启动
Linux上docker部署命令:
docker run -d --name emqx \
-p 1883:1883 -p 8083:8083 \
-p 8084:8084 -p 8883:8883 \
-p 18083:18083 \
-v $PWD/etc:/opt/emqx/etc \
-v $PWD/data:/opt/emqx/data \
-v $PWD/log:/opt/emqx/log \
emqx/emqx:5.4.1
Windows上docker部署命令:
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 -v D:\emqx\etc:/opt/emqx/etc -v D:\emqx\data:/opt/emqx/data -v D:\emqx\log:/opt/emqx/log emqx/emqx:5.4.1
挂载目录如下:
2.3访问首页
http://localhost:18083/(localhost 可替换为您的实际 IP 地址)以访问 EMQX Dashboard 管理控制台,进行设备连接与相关指标监控管理。
默认用户名及密码:
账号:admin
密码:public
首次登录有个改密码页面,可以修改也可以跳过
2.4添加客户端认证方式
3.相关文档链接
3.1官方文档
https://www.emqx.io/docs/zh/v5.2/
3.2MQTTX客户端下载地址
https://mqttx.app/zh
https://mqttx.app/zh/downloads
3.3关于MQTT的一切
http://www.emqx.io/online-mqtt-client#/help
3.4MQTT教程
https://www.emqx.com/zh/mqtt-guide?utm_source=mqttx-web&utm_medium=referral&utm_campaign=mqttx-web-help-to-learn-mqtt
3.5下载地址
https://www.emqx.io/downloads?os=Docker
3.6Kubernetes部署文档
https://docs.emqx.com/zh/emqx-operator/latest/getting-started/getting-started.html
4.MQTTX客户端
4.1新建连接
4.2已连接
4.3服务端的客户端连接
使用该工具就可以模拟发消息测试。
5.总结
到此,EMQX部署就分享完了,MQTT协议是一个物联网场景下用的特别多的一个协议,版本有MQTT3、MQTT3.1.1、MQTT5.0,MQTT在弱网环境下比其它的一些协议要稳定,它也是构建在tcp协议之上的一个协议,之前的文章分享过一个TIO的开源的websock项目,TIO在弱网环境就没有EMQX稳定且性能也没有EMQX好,所以可以使用EMQX替换前面的TIO,希望我的分享对你有所帮助,后面还会给大家分享,开发中如何集成使用MQTT,敬请期待,请一键三连,么么么哒!