全網唯一開源java開發的支持高擴展,高性能的Mqtt集群broker!


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM