SMQTT 是一款高性能、开源的 MQTT 服务器,旨在提供支持单机、容器化和集群部署的 MQTT 服务,具备低延迟和高吞吐量,支持数百万 TCP 连接。本文将向您介绍 SMQTT 的主要功能、优势以及适用场景。
WIKI: https://wiki.smqtt.cc/
gitee: https://gitee.com/quickmsg
为什么选择 MQTT?
MQTT 是一种轻量级的消息传递协议,采用发布/订阅模型,非常适用于物联网消息传递,如传感器、手机、嵌入式设备等。其低开销和高效性使其成为 IoT 设备之间进行可靠消息传递的理想选择。
优势
SMQTT 具有以下显著优势:
- 标准 MQTT 协议支持: SMQTT 实现了 MQTT 协议的标准版本,包括 3.1 和 3.1.1,确保了与各种 MQTT 客户端的兼容性。
- 高并发支持: SMQTT 可应对高并发场景,而且支持集群化部署,使其适用于大规模部署。
- 高性能和高吞吐量: SMQTT 是基于 Reactor-Netty(Spring WebFlux 的底层依赖)开发的,底层采用 Reactor3 反应堆模型,具备卓越的性能和高吞吐量。此外,它还利用 Netty 提供原生性能优势。
功能
SMQTT 具备多种功能,包括但不限于:
- 标准协议功能: 支持 MQTT 协议的标准功能,包括发布/订阅、QoS 等。
- 数据持久化: SMQTT 支持将消息数据持久化存储,以确保数据安全和可靠性。您可以选择默认内存存储或持久化存储到 Redis 或数据库。
- 规则引擎: 支持规则引擎,可以用于消息处理和转发。
- 集群化功能: SMQTT 提供集群支持,使用 Gossip 协议实现集群通信,确保高可用性。
- 管理监控页面: 提供管理后台,用于管理和监控 MQTT 服务器,同时支持 Grafana 监控集成,以实现性能监控。
- ACL 权限管理: 支持对设备和资源的访问授权,确保数据安全性。
- 认证模块: 提供多种认证方式,包括 HTTP、匿名、固定密码和 SQL 认证。
- 拦截器: 支持自定义消息拦截器,用于处理消息。
- 容器化支持: 支持容器化部署,方便集成到现有容器化环境中。
总结
SMQTT 的启动和管理非常简单,支持 Spring Boot Starter,可以轻松地将其集成到 Spring Boot 项目中。此外,您可以访问管理后台以监控和管理 MQTT 服务器。
如果您正在寻找一款高性能、开源的 MQTT 服务器,SMQTT 可能是您的理想选择。它支持各种协议、高并发场景和集群化部署,具备优秀的性能和可扩展性,适用于各种 IoT 和通信需求。
启动方式
main方式启动
<!--smqtt依赖 -->
<dependency>
<groupId>io.github.quickmsg</groupId>
<artifactId>smqtt-core</artifactId>
<version>${Latest version}</version>
</dependency>
<!--集群依赖 -->
<dependency>
<artifactId>smqtt-registry-scube</artifactId>
<groupId>io.github.quickmsg</groupId>
<version>${Latest version}</version>
</dependency>
<!--管理ui依赖 -->
<dependency>
<artifactId>smqtt-ui</artifactId>
<groupId>io.github.quickmsg</groupId>
<version>${Latest version}</version>
</dependency>
阻塞式启动服务:
Bootstrap.builder()
.rootLevel(Level.INFO)
.websocketConfig(
BootstrapConfig.WebsocketConfig
.builder()
.enable(false)
.path("/mqtt")
.port(8888)
.build()
)
.tcpConfig(
BootstrapConfig
.TcpConfig
.builder()
.port(1883)
.ssl(SslContext.builder().enable(false).build())
.build())
.httpConfig(
BootstrapConfig
.HttpConfig
.builder()
.enable(false)
.accessLog(true)
.admin(BootstrapConfig.HttpAdmin.builder().enable(true).username("smqtt").password("smqtt").build())
.build())
.clusterConfig(
BootstrapConfig.
ClusterConfig
.builder()
.enable(false)
.namespace("smqtt")
.node("node-1")
.port(7773)
.url("127.0.0.1:7771,127.0.0.1:7772").
build())
.build()
.startAwait();
非阻塞式启动服务:
Bootstrap bootstrap = Bootstrap.builder()
.rootLevel(Level.INFO)
.websocketConfig(
BootstrapConfig.WebsocketConfig
.builder()
.enable(false)
.path("/mqtt")
.port(8888)
.build()
)
.tcpConfig(
BootstrapConfig
.TcpConfig
.builder()
.port(1883)
.ssl(SslContext.builder().enable(false).build())
.build())
.httpConfig(
BootstrapConfig
.HttpConfig
.builder()
.enable(false)
.accessLog(true)
.admin(BootstrapConfig.HttpAdmin.builder().enable(true).username("smqtt").password("smqtt").build())
.build())
.clusterConfig(
BootstrapConfig.
ClusterConfig
.builder()
.enable(false)
.namespace("smqtt")
.node("node-1")
.port(7773)
.url("127.0.0.1:7771,127.0.0.1:7772").
build())
.build()
.start().block();
jar方式
1.下载源码 mvn compile package -Dmaven.test.skip=true -P jar,web
在smqtt-bootstrap/target目录下生成jar
2.准备配置文件 config.yaml
java -jar smqtt-bootstrap-1.0.1-SNAPSHOT.jar <config.yaml路径>
docker 方式
拉取镜像
# 拉取docker镜像地址
docker pull 1ssqq1lxr/smqtt:latest
启动镜像默认配置
# 启动服务
docker run -it -p 1883:1883 1ssqq1lxr/smqtt
启动镜像使用自定义配置(同上准备配置文件config.yaml)
# 启动服务
docker run -it -v <配置文件路径目录>:/conf -p 1883:1883 -p 1999:1999 1ssqq1lxr/smqtt
springboot方式
- 引入依赖
<dependency>
<groupId>io.github.quickmsg</groupId>
<artifactId>smqtt-spring-boot-starter</artifactId>
<version>${Latest version >= 1.0.8}</version>
</dependency>
- 启动类Application上添加注解
@EnableMqttServer
- 配置application.yml文件properties也支持,但是需要自己转换,没有提供demo文件config.yaml
- 启动springboot服务服务即可
- 如果引入的是spring-boot-starter-parent的管理包,如果启动报错,则需要添加以下依赖
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.4.9</version>
</dependency>
<dependency>
<groupId>io.projectreactor.netty</groupId>
<artifactId>reactor-netty</artifactId>
<version>1.0.10</version>
</dependency>
回复