天天看点

一款国产开源高性、高吞吐量、高扩展性的物联网mqtt集群broker

作者:码农的炉灶社

简介:

SMQTT基于reactor-netty(spring-webflux底层依赖) 开发,底层采用Reactor3反应堆模型,支持单机部署,支持容器化部署,具备低延迟,高吞吐量,支持百万TCP连接,同时支持多种协议交互,是一款非常优秀的消息中间件!

功能特性:

一款国产开源高性、高吞吐量、高扩展性的物联网mqtt集群broker
  1. 消息质量等级实现(支持qos0,qos1,qos2)
  2. topicFilter支持
  3. topic分级(test/test)
  4. +支持(单层匹配)
  5. *支持(多层匹配)
  6. 会话消息
  7. 默认内存存储
  8. 支持持久化(redis/db)
  9. 保留消息
  10. 默认内存存储
  11. 支持持久化(redis/db)
  12. 遗嘱消息
  13. 设备掉线时候触发
  14. 客户端认证
  15. 支持spi注入外部认证
  16. tls加密
  17. 支持tls加密(mqtt端口/http端口)
  18. websocket协议支持x
  19. 使用mqtt over websocket
  20. http协议交互
  21. 支持http接口推送消息
  22. 支持spi扩展http接口
  23. SPI接口扩展支持
  24. 消息管理接口(会话消息/保留消息管理)
  25. 通道管理接口 (管理系统的客户端连接)
  26. 认证接口 (用于自定义外部认证)
  27. 拦截器 (用户自定义拦截消息)
  28. 集群支持(gossip协议实现)
  29. 容器化支持
  30. 默认镜像最新tag: 1ssqq1lxr/smqtt
  31. 持久化支持(session 保留消息)
  32. 规则引擎支持
  33. 支持springboot starter启动
  34. 管理后台
  35. 请参考smqtt文档如何启动管理后台
  36. grafana监控集成
  37. 支持influxdb
  38. 支持prometheus
  39. ACL权限管理
  40. 对设备、资访问授权
  41. 认证模块
  42. 支持http
  43. 支持匿名
  44. 支持固定密码
  45. 支持sql

尝试一下

大家不要恶意链接,谢谢!
管理 说明 其他
121.40.92.152:1883 mqtt端口 用户名:smqtt 密码:smqtt
121.40.92.152:18888 mqtt over websocket 用户名:smqtt 密码:smqtt
http://121.40.92.152:60000/smqtt/admin 管理后台 用户名:smqtt 密码:smqtt

启动方式

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           
  1. 准备配置文件 config.yaml
  2. config.yaml
  3. 启动服务
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. 引入依赖
  2. <dependency> <groupId>io.github.quickmsg</groupId> <artifactId>smqtt-spring-boot-starter</artifactId> <version>${Latest version >= 1.0.8}</version> </dependency>
  3. 启动类Application上添加注解 @EnableMqttServer
  4. 配置application.yml文件
  5. properties也支持,但是需要自己转换,没有提供demo文件
  6. config.yaml
  7. 启动springboot服务服务即可
  8. 如果引入的是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>           

官网地址

https://www.smqtt.cc/

wiki地址

https://wiki.smqtt.cc/

管理后台

一款国产开源高性、高吞吐量、高扩展性的物联网mqtt集群broker

监控页面

Mqtt监控

一款国产开源高性、高吞吐量、高扩展性的物联网mqtt集群broker

Jvm监控

一款国产开源高性、高吞吐量、高扩展性的物联网mqtt集群broker

Netty监控

一款国产开源高性、高吞吐量、高扩展性的物联网mqtt集群broker

结束语

目前市面上主流MQTT协议的broker选型EMQX,EMQX分商业版和社区版,社区版被阉割,用商业版又是一笔很大开销,此款国产开源的MQTT Broker具备很多商业案例,性能良好,值得选型使用!

开源分享不易,感谢大家的支持,多关注,点赞。后续也会分享更多的干货和技术资讯,您的阅读就是对小编的支持,再次感谢各位老铁!

继续阅读