Files
mqtt/README.md
Luca Casonato a817bc8f8a Subscribe to multiple topics at once (#2)
* Subscribe multiple

* Fixed CI

* Test coverage

* Fixed CI ports

* Added SubscribeMultiple to readme
2020-02-26 15:50:48 +01:00

132 lines
2.9 KiB
Markdown

# mqtt
[![GoDoc](https://godoc.org/github.com/lucacasonato/mqtt?status.svg)](http://godoc.org/github.com/lucacasonato/mqtt)
[![CI](https://github.com/lucacasonato/mqtt/workflows/ci/badge.svg)](https://github.com/lucacasonato/mqtt/actions?workflow=ci)
[![Code Coverage](https://img.shields.io/codecov/c/gh/lucacasonato/mqtt)](https://codecov.io/gh/lucacasonato/mqtt)
[![Go Report](https://goreportcard.com/badge/github.com/lucacasonato/mqtt)](https://goreportcard.com/report/github.com/lucacasonato/mqtt)
An mqtt client for Go that improves usability over the [paho.mqtt.golang](https://github.com/eclipse/paho.mqtt.golang) library it wraps. Made for 🧑.
## installation
```bash
go get github.com/lucacasonato/mqtt
```
```go
import "github.com/lucacasonato/mqtt"
// or
import (
"github.com/lucacasonato/mqtt"
)
```
## usage
### creating a client & connecting
```go
client, err := mqtt.NewClient(mqtt.ClientOptions{
// required
Servers: []string{
"tcp://test.mosquitto.org:1883",
},
// optional
ClientID: "my-mqtt-client",
Username: "admin",
Password: "***",
AutoReconnect: true,
})
if err != nil {
panic(err)
}
err = client.Connect(context.WithTimeout(2 * time.Second))
if err != nil {
panic(err)
}
```
You can use any of these schemes for the broker `tcp` (unesecured), `ssl` (secured), `ws` (unsecured), `wss` (secured).
### disconnecting from a client
```go
client.Disconnect()
```
### publishing a message
#### bytes
```go
err := client.Publish(context.WithTimeout(1 * time.Second), "api/v0/main/client1", []byte(0, 1 ,2, 3), mqtt.AtLeastOnce)
if err != nil {
panic(err)
}
```
#### string
```go
err := client.PublishString(context.WithTimeout(1 * time.Second), "api/v0/main/client1", "hello world", mqtt.AtLeastOnce)
if err != nil {
panic(err)
}
```
#### json
```go
err := client.PublishJSON(context.WithTimeout(1 * time.Second), "api/v0/main/client1", []string("hello", "world"), mqtt.AtLeastOnce)
if err != nil {
panic(err)
}
```
### subscribing
```go
err := client.Subscribe(context.WithTimeout(1 * time.Second), "api/v0/main/client1", mqtt.AtLeastOnce)
if err != nil {
panic(err)
}
```
```go
err := client.SubscribeMultiple(context.WithTimeout(1 * time.Second), map[string]mqtt.QOS{
"api/v0/main/client1": mqtt.AtLeastOnce,
})
if err != nil {
panic(err)
}
```
### handling
```go
route := client.Handle("api/v0/main/client1", func(message mqtt.Message) {
v := interface{}{}
err := message.PayloadJSON(&v)
if err != nil {
panic(err)
}
fmt.Printf("recieved a message with content %v\n", v)
})
// once you are done with the route you can stop handling it
route.Stop()
```
### listening
```go
messages, route := client.Listen("api/v0/main/client1")
for {
message := <-messages
fmt.Printf("recieved a message with content %v\n", message.PayloadString())
}
// once you are done with the route you can stop handling it
route.Stop()
```