mirror of
https://github.com/lucacasonato/mqtt.git
synced 2025-09-26 19:01:12 +08:00

* Subscribe multiple * Fixed CI * Test coverage * Fixed CI ports * Added SubscribeMultiple to readme
132 lines
2.9 KiB
Markdown
132 lines
2.9 KiB
Markdown
# mqtt
|
|
|
|
[](http://godoc.org/github.com/lucacasonato/mqtt)
|
|
[](https://github.com/lucacasonato/mqtt/actions?workflow=ci)
|
|
[](https://codecov.io/gh/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()
|
|
```
|