SMQTT是一款开源的MQTT消息代理Broker,

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

smqtt目前拥有的功能如下:

  1. 消息质量等级实现(支持qos0,qos1,qos2)
  2. 会话消息
  3. 保留消息
  4. 遗嘱消息
  5. 客户端认证
  6. tls加密
  7. websocket协议支持
  8. http协议交互
  9. SPI接口扩展支持
    • 消息管理接口(会话消息/保留消息管理)
    • 通道管理接口 (管理系统的客户端连接)
    • 认证接口 (用于自定义外部认证)
    • 拦截器 (用户自定义拦截消息)
  10. 集群支持(gossip协议实现)
  11. 容器化支持
  12. 持久化支持(session 保留消息)
  13. 管理系统

main方式启动

引入依赖

<dependency>
<groupId>io.github.quickmsg</groupId>
<artifactId>smqtt-core</artifactId>
<version>1.0.6</version>
</dependency>

阻塞式启动服务:


Bootstrap.builder()
.rootLevel(Level.INFO)
.wiretap(false)
.port(8555)
.websocketPort(8999)
.options(channelOptionMap -> { })//netty options设置
.childOptions(channelOptionMap -> { }) //netty childOptions设置
.highWaterMark(1000000)
.reactivePasswordAuth((U, P) -> true)
.lowWaterMark(1000)
.ssl(false)
.sslContext(new SslContext("crt", "key"))
.isWebsocket(true)
.httpOptions(Bootstrap.HttpOptions.builder().enableAdmin(true).ssl(false).accessLog(true).build())
.clusterConfig(
ClusterConfig.builder()
.clustered(false)
.port(7773)
.nodeName("node-2")
.clusterUrl("127.0.0.1:7771,127.0.0.1:7772")
.build()
)
.build()
.startAwait();

非阻塞式启动服务:



Bootstrap bootstrap = Bootstrap.builder()
.rootLevel(Level.INFO)
.wiretap(false)
.port(8555)
.websocketPort(8999)
.options(channelOptionMap -> { })//netty options设置
.childOptions(channelOptionMap -> { }) //netty childOptions设置
.highWaterMark(1000000)
.reactivePasswordAuth((U, P) -> true)
.lowWaterMark(1000)
.ssl(false)
.sslContext(new SslContext("crt", "key"))
.isWebsocket(true)
.httpOptions(Bootstrap.HttpOptions.builder().enableAdmin(true).ssl(false).accessLog(true).build())
.clusterConfig(
ClusterConfig.builder()
.clustered(false)
.port(7773)
.nodeName("node-2")
.clusterUrl("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.properties

# 日志级别 ALL|TRACE|DEBUG|INFO|WARN|ERROR|OFF
smqtt.log.level=INFO
# 开启tcp端口
smqtt.tcp.port=1883
# 高水位
smqtt.tcp.lowWaterMark=4000000
# 低水位
smqtt.tcp.highWaterMark=80000000
# 开启ssl加密
smqtt.tcp.ssl=false
# 证书crt smqtt.tcp.ssl.crt =
# 证书key smqtt.tcp.ssl.key =
# 开启日志
smqtt.tcp.wiretap=false
# boss线程
smqtt.tcp.bossThreadSize=4
# work线程
smqtt.tcp.workThreadSize=8
# websocket端口
smqtt.websocket.port=8999
# websocket开启
smqtt.websocket.enable=true
# smqtt用户
smqtt.tcp.username=smqtt
# smqtt密码
smqtt.tcp.password=smqtt
# 开启http
smqtt.http.enable=true
# 开启http日志
smqtt.http.accesslog=true
# 开启ssl
smqtt.http.ssl.enable=false
# smqtt.http.ssl.crt =
# smqtt.http.ssl.key =
# 开启管理后台(必须开启http)
smqtt.http.admin.enable=true
# 管理后台登录用户
smqtt.http.admin.username=smqtt
# 管理后台登录密码
smqtt.http.admin.password=smqtt
# 开启集群
smqtt.cluster.enable=false
# 集群节点地址
smqtt.cluster.url=127.0.0.1:7771,127.0.0.1:7772
# 节点端口
smqtt.cluster.port=7771
# 节点名称
smqtt.cluster.node=node-1
# 容器集群映射主机
# smqtt.cluster.external.host = localhost
# 容器集群映射port
# smqtt.cluster.external.port
  1. 启动服务
  java -jar smqtt-bootstrap-1.0.1-SNAPSHOT.jar <conf.properties路径>

docker 方式

拉取镜像

# 拉取docker镜像地址
docker pull 1ssqq1lxr/smqtt:latest

启动镜像默认配置

# 启动服务
docker run -it -p 1883:1883 1ssqq1lxr/smqtt

启动镜像使用自定义配置(同上准备配置文件conf.properties)

# 启动服务
docker run -it -v <配置文件路径目录>:/conf -p 1883:1883 -p 1999:1999 1ssqq1lxr/smqtt

测试服务(启动http端口)

  • 启动客户端订阅主题 test/+

  • 使用http接口推送mqtt消息

# 推送消息
curl -H "Content-Type: application/json" -X POST -d '{"topic": "test/teus", "qos":2, "retain":true, "message":"我来测试保留消息3" }' "http://localhost:1999/smqtt/publish"

管理后台(60000端口)

如何开启

  • main启动

    设置httpOptions && enableAdmin = true

    Bootstrap.httpOptions(Bootstrap.HttpOptions.builder().enableAdmin(true).ssl(false).accessLog(true).build())
    
    
  • jar / docker 启动

    设置config.properties

    # 开启http
    smqtt.http.enable=true
    # 开启http日志
    smqtt.http.accesslog=true
    # 开启ssl
    smqtt.http.ssl.enable=false
    # smqtt.http.ssl.crt =
    # smqtt.http.ssl.key =
    # 开启管理后台(必须开启http)
    smqtt.http.admin.enable=true
    # 管理后台登录用户
    smqtt.http.admin.username=smqtt
    # 管理后台登录密码
    smqtt.http.admin.password=smqtt

页面预览

压测文档

点这里

wiki地址

集群类配置参考文档:

smqtt文档

License

Apache License, Version 2.0

最新文章

  1. 框架dubbox的简单使用
  2. iOS---友盟推送遇到的坑
  3. 制作手机相册 全屏滚动插件fullpage.js
  4. 编写高质量的Objective-C代码
  5. Druid的使用步骤
  6. DMOZ介绍以及如何提交
  7. (转)苹果消息推送服务器 php 证书生成
  8. python高级编程之选择好名称:完2
  9. Chessboard(规律)&amp;&amp;阿里巴巴和n个大盗(规律)
  10. poj 1905 Expanding Rods 二分
  11. 上传预览 easyui部分控件获取focuse 表单验证
  12. akka-stream与actor系统集成以及如何处理随之而来的背压问题
  13. 从线程池到synchronized关键字详解
  14. bash_profile
  15. Mxd文档更新比例尺
  16. echarts图表大小随着外部div大小变化
  17. 内存管理buddy[原理]
  18. AWS EC2实例Ubuntu系统设置root用户密码并使用root/ubuntu用户登录
  19. e与复利
  20. Android-Failed to open zip file

热门文章

  1. pyqt安装
  2. Nacos源码结构和AP模式注册中心实现介绍
  3. githubssh配置
  4. Vue全家桶之组件化开发
  5. Python+Selenium自动化-安装模块和浏览器驱动操作方法
  6. Python+Selenium - iframe定位
  7. Python+Selenium学习笔记18 - 不开启浏览器测试
  8. 多篇开源CVPR 2020 语义分割论文
  9. Go探索-String
  10. 【NX二次开发】uf5945获得旋转矩阵、uf5947根据变换矩阵移动或复制对象