SMQTT - 开源高性能 MQTT 服务器

SMQTT - 开源高性能 MQTT 服务器缩略图
本文目录
  1. 1. 为什么选择 MQTT?
  2. 2. 优势
  3. 3. 功能
  4. 4. 总结
  5. 5. 启动方式
  6. 6. main方式启动
  7. 7. jar方式
  8. 8. docker 方式
  9. 9. springboot方式

SMQTT 是一款高性能、开源的 MQTT 服务器,旨在提供支持单机、容器化和集群部署的 MQTT 服务,具备低延迟和高吞吐量,支持数百万 TCP 连接。本文将向您介绍 SMQTT 的主要功能、优势以及适用场景。

WIKI: https://wiki.smqtt.cc/

gitee: https://gitee.com/quickmsg

为什么选择 MQTT?

MQTT 是一种轻量级的消息传递协议,采用发布/订阅模型,非常适用于物联网消息传递,如传感器、手机、嵌入式设备等。其低开销和高效性使其成为 IoT 设备之间进行可靠消息传递的理想选择。

优势

SMQTT 具有以下显著优势:

  1. 标准 MQTT 协议支持: SMQTT 实现了 MQTT 协议的标准版本,包括 3.1 和 3.1.1,确保了与各种 MQTT 客户端的兼容性。
  2. 高并发支持: SMQTT 可应对高并发场景,而且支持集群化部署,使其适用于大规模部署。
  3. 高性能和高吞吐量: SMQTT 是基于 Reactor-Netty(Spring WebFlux 的底层依赖)开发的,底层采用 Reactor3 反应堆模型,具备卓越的性能和高吞吐量。此外,它还利用 Netty 提供原生性能优势。
SMQTT - 开源高性能 MQTT 服务器插图

功能

SMQTT 具备多种功能,包括但不限于:

  1. 标准协议功能: 支持 MQTT 协议的标准功能,包括发布/订阅、QoS 等。
  2. 数据持久化: SMQTT 支持将消息数据持久化存储,以确保数据安全和可靠性。您可以选择默认内存存储或持久化存储到 Redis 或数据库。
  3. 规则引擎: 支持规则引擎,可以用于消息处理和转发。
  4. 集群化功能: SMQTT 提供集群支持,使用 Gossip 协议实现集群通信,确保高可用性。
  5. 管理监控页面: 提供管理后台,用于管理和监控 MQTT 服务器,同时支持 Grafana 监控集成,以实现性能监控。
  6. ACL 权限管理: 支持对设备和资源的访问授权,确保数据安全性。
  7. 认证模块: 提供多种认证方式,包括 HTTP、匿名、固定密码和 SQL 认证。
  8. 拦截器: 支持自定义消息拦截器,用于处理消息。
  9. 容器化支持: 支持容器化部署,方便集成到现有容器化环境中。

总结

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

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方式

  1. 引入依赖
<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>
技术术语(共 6 个)—— 点击展开
MQTT轻量级物联网消息传输协议,基于发布/订阅模式,适合低带宽不稳定网络
QoS服务质量等级,0 最多一次 / 1 至少一次 / 2 恰好一次
订阅客户端向 Broker 注册感兴趣的主题以接收消息
发布客户端向指定主题发送消息
WebSocket浏览器与 Broker 通过 ws/wss 传输 MQTT 的通道
传感器将物理量转换为电信号的检测装置
来源/工具信息 —— 点击展开
来源 MQTT中文网(mqtt.cn) —— 国内领先的MQTT通信协议技术社区 分类 MQTT 客户端库 / MQTT 编程 / 学习 字数 4065 字 · 阅读约 11 分钟 更新 2024-04-15 永久链接 https://www.mqtt.cn/1041.html
推荐工具:MQTT调试助手 微信小程序
MQTT中文网官方推出的MQTT调试工具,支持 MQTT 3.1.1/5.0 实时连接调试、主题订阅、消息收发监控与报文分析。 无需安装,微信搜索「MQTT调试助手」即可使用。 电脑端入口:https://www.mqtt.cn/mqtttool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 mqtt.cn
📝 作者声明
本文由 MQTT中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口

发表回复