fhmq / hmq

High performance mqtt broker
Apache License 2.0
1.32k stars 273 forks source link
acl bridge broker cluster go golang iot kafka mqtt performance-mqtt-broker websocket

Free and High Performance MQTT Broker

About

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

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"
    },
    "plugins": {
        "auth": "authhttp",
        "bridge": "kafka"
    }
}

Features and Future

Share SUBSCRIBE

| Prefix              | Examples                                  | Publish                      |
| ------------------- |-------------------------------------------|--------------------------- --|
| $share/<group>/topic  | mosquitto_sub -t ‘$share/<group>/topic’ | mosquitto_pub -t ‘topic’     |

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")

Other Version Of Cluster Based On gRPC: click here

Online/Offline Notification

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

Performance

License

Reference

Benchmark Tool