开源大规模分布式MQTT消息服务器EMQX部署教程

2024-01-30 10:28

本文主要是介绍开源大规模分布式MQTT消息服务器EMQX部署教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

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.0protected-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,敬请期待,请一键三连,么么么哒!

这篇关于开源大规模分布式MQTT消息服务器EMQX部署教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/659944

相关文章

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例