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

全网唯一开源java开发的支持高扩展,高性能的Mqtt集群broker!的更多相关文章

  1. 如何使用java搭建一款高性能的Mqtt集群broker!

    SMQTT是一款开源的MQTT消息代理Broker, SMQTT基于Netty开发,底层采用Reactor3反应堆模型,支持单机部署,支持容器化部署,具备低延迟,高吞吐量,支持百万TCP连接,同时支持 ...

  2. 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南

    原文:http://my.oschina.net/wstone/blog/365010#OSC_h3_13 (WJW)高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南 [X] ...

  3. 【深入 MongoDB 开发】使用正确的姿势连接分片集群

    MongoDB分片集群(Sharded Cluster)通过将数据分散存储到多个分片(Shard)上,来实现高可扩展性.实现分片集群时,MongoDB 引入 Config Server 来存储集群的元 ...

  4. Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群

    大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(H ...

  5. 通过LVS+Keepalived搭建高可用的负载均衡集群系统

    1. 安装LVS软件      (1)安装前准备操作系统:统一采用Centos6.5版本,地址规划如下: 服务器名 IP地址 网关 虚拟设备名 虚拟ip Director Server 192.168 ...

  6. Linux 高可用(HA)集群之keepalived详解

    http://freeloda.blog.51cto.com/2033581/1280962 大纲 一.前言 二.Keepalived 详解 三.环境准备 四.LVS+Keepalived 实现高可用 ...

  7. JMS之——ActiveMQ 高可用与负载均衡集群安装、配置(ZooKeeper + LevelDB + Static discovery)

    一.说明 从 ActiveMQ 5.9 开始, ActiveMQ 的集群实现方式取消了传统的 Master-Slave 方式,增加了基于ZooKeeper + LevelDB 的 Master-Sla ...

  8. java架构之路(MQ专题)kafka集群配置和简单使用

    前面我们说了RabbitMQ和RocketMQ的安装和简单的使用,这次我们说一下Kafka的安装配置,后面我会用几个真实案例来说一下MQ的真实使用场景.天冷了,不愿意伸手,最近没怎么写博客了,还请见谅 ...

  9. 超详细干货!Docker+PXC+Haproxy搭建高可用强一致性的MySQL集群

    前言 干货又来了,全程无废话,可先看目录了解. MySQL搭建集群最常见的是binlog方式,但还有一种方式是强一致性的,能保证集群节点的数据一定能够同步成功,这种方式就是pxc,本篇就使用图文方式一 ...

随机推荐

  1. Python数学建模-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...

  2. nginx 的基础知识(三)

    Nginx命令 nginx -s reopen 重启nginx nginx -s reload  重新加载nginx文件 nginx -s stop  停止nginx服务 nginx -s quit ...

  3. 基于 element-plus 封装一个依赖 json 动态渲染的查询控件

    前情回顾 基于 el-form 封装一个依赖 json 动态渲染的表单控件 Vue3 封装第三方组件(一)做一个合格的传声筒 功能 使用 vue3 + element-plus 封装了一个查询控件,专 ...

  4. Python发送SMTP邮件指南

      SMTP(Simple Mail Transfer Protocol)简单邮件传输协议,Python内置对SMTP的支持,可以发送纯文本文件,HTML邮件以及附带文件.   一.两个模块 Pyth ...

  5. GO语言复合类型01---指针

    package main /* %T 类型占位符 %v 值占位符 %p 地址(指针)占位符,只有地址才能替换%p &value 对值取地址 *addr 对地址取值 **int 指向int型指针 ...

  6. 书列荐书 |《滚雪球:巴菲特和他的财富人生》【美】艾丽斯&#183;施罗德著

    一开始听说这本书比较不错,但是比较搞笑的是,我买了之后才发现还有个下册.于是我决定把书退回去,并用了两天的时间把它给看完了..基本看的差不多了. 沃伦·巴菲特从上小学,初中,高中就已经变得有经济头脑了 ...

  7. PCB的IPC标准是什么

    PCB的IPC标准是什么 印刷电路研究所成立于1957年,有6家印刷电路板制造商.1977年,许多电子公司与工控机联合起来,以实现电子电路的互连和封装.1998年,IPC协会创建了一个"连接 ...

  8. python_request的安装及模拟json的post请求及带参数的get请求

    一.Requests模块安装 安装方式一:执行 pip install -U requests 联网安装requests 安装方式二:进入https://pypi.org/project/reques ...

  9. Samba 服务基础

    配置SMB共享,跨平台的共享,Windows与Linux的共享 • Samba 软件项目 用途:为客户机提供共享使用的文件夹 协议:SMB(TCP 139).CIFS(TCP 445) • 所需软件包 ...

  10. JVM面试题(史上最强、持续更新、吐血推荐)

    文章很长而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三部 ...