基于 golang的高性能MQTT Broker

chowyu08 · 2019-01-27 20:44:52 · 9642 次点击 · 预计阅读时间 5 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2019-01-27 20:44:52 的文章,其中的信息可能已经有所发展或是发生改变。

Free and High Performance MQTT Broker

About

Golang MQTT Broker, Version 3.1.1, and Compatible for eclipse paho client and mosquitto-client

Download: click here

RUNNING

$ go get github.com/fhmq/hmq
$ cd $GOPATH/github.com/fhmq/hmq
$ go run main.go

Usage of hmq:

Usage: hmq [options]

Broker Options:
    -w,  --worker <number>            Worker num to process message, perfer (client num)/10. (default 1024)
    -p,  --port <port>                Use port for clients (default: 1883)
         --host <host>                Network host to listen on. (default "0.0.0.0")
    -ws, --wsport <port>              Use port for websocket monitoring
    -wsp,--wspath <path>              Use path for websocket monitoring
    -c,  --config <file>              Configuration file

Logging Options:
    -d, --debug <bool>                Enable debugging output (default false)
    -D                                Debug enabled

Cluster Options:
    -r,  --router  <rurl>             Router who maintenance cluster info
    -cp, --clusterport <cluster-port> Cluster listen port for others

Common Options:
    -h, --help                        Show this message

hmq.config

{
    "workerNum": 4096,
    "port": "1883",
    "host": "0.0.0.0",
    "cluster": {
        "host": "0.0.0.0",
        "port": "1993"
    },
    "router": "127.0.0.1:9888",
    "wsPort": "1888",
    "wsPath": "/ws",
    "wsTLS": true,
    "tlsPort": "8883",
    "tlsHost": "0.0.0.0",
    "tlsInfo": {
        "verify": true,
        "caFile": "tls/ca/cacert.pem",
        "certFile": "tls/server/cert.pem",
        "keyFile": "tls/server/key.pem"
    },
    "acl":true,
    "aclConf":"conf/acl.conf"
}

Features and Future

  • Supports QOS 0 and 1

  • Cluster Support

  • Containerization

  • Supports retained messages

  • Supports will messages

  • Websocket Support

  • TLS/SSL Support

  • Flexible ACL

Cluster

 1, start router for hmq  (https://github.com/fhmq/router.git)
     $ go get github.com/fhmq/router
     $ cd $GOPATH/github.com/fhmq/router
     $ go run main.go
 2, config router in hmq.config  ("router": "127.0.0.1:9888")

ACL Configure

The ACL rules define:

Allow | type | value | pubsub | Topics

ACL Config

## type clientid , username, ipaddr
##pub 1 ,  sub 2,  pubsub 3
## %c is clientid , %u is username
allow      ip          127.0.0.1   2     $SYS/#
allow      clientid    0001        3     #
allow      username    admin       3     #
allow      username    joy         3     /test,hello/world 
allow      clientid    *           1     toCloud/%c
allow      username    *           1     toCloud/%u
deny       clientid    *           3     #
#allow local sub $SYS topic
allow      ip          127.0.0.1   2    $SYS/#
#allow client who's id with 0001 or username with admin pub sub all topic
allow      clientid    0001        3        #
allow      username    admin       3        #
#allow client with the username joy can pub sub topic '/test' and 'hello/world'
allow      username    joy         3     /test,hello/world
#allow all client pub the topic toCloud/{clientid/username}
allow      clientid    *         1         toCloud/%c
allow      username    *         1         toCloud/%u
#deny all client pub sub all topic
deny       clientid    *         3           #

Client match acl rule one by one

          ---------              ---------              ---------
Client -> | Rule1 | --nomatch--> | Rule2 | --nomatch--> | Rule3 | --> 
          ---------              ---------              ---------
              |                      |                      |
            match                  match                  match
             \|/                    \|/                    \|/
        allow | deny           allow | deny           allow | deny

Online/Offline Notification

 topic:
     $SYS/broker/connection/clients/<clientID>
 payload:
    {"clientID":"client001","online":true/false,"timestamp":"2018-10-25T09:32:32Z"}

Performance

  • High throughput

  • High concurrency

  • Low memory and CPU

License

  • Apache License Version 2.0

Reference


有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

9642 次点击  
加入收藏 微博
下一篇:gRPC入门
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传