为了方便客户端测试,搭建好 EMQX 服务之后,需要用 golang 写一个发布消息的测试程序。 用于向指定主题推送消息,这样客户端可以提前测试 MQTT 相关的功能。
安装 Eclipse Paho MQTT Go Client
> go get github.com/eclipse/paho.mqtt.golang
go: downloading github.com/eclipse/paho.mqtt.golang v1.4.1
go: downloading github.com/gorilla/websocket v1.4.2
go: added github.com/eclipse/paho.mqtt.golang v1.4.1
使用账号密码
由于官方 Demo 里没有账号密码的示例,所以整理了一下:
// MQTT API 测试
package main
import (
	"fmt"
	"os"
	"time"
	mqtt "github.com/eclipse/paho.mqtt.golang"
)
const (
	address  = "tcp://x.x.x.x:1883"
	userName = "x"
	password = "x"
	topic    = "test_topic"
	clientID = "test"
)
var f mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
	fmt.Printf("TOPIC: %s\n", msg.Topic())
	fmt.Printf("MSG: %s\n", msg.Payload())
}
func main() {
	opts := mqtt.NewClientOptions().
		AddBroker(address).
		SetClientID(clientID).
		SetUsername(userName).
		SetPassword(password)
	opts.SetKeepAlive(60 * time.Second)
	// 设置消息回调处理函数
	opts.SetDefaultPublishHandler(f)
	opts.SetPingTimeout(1 * time.Second)
	c := mqtt.NewClient(opts)
	if token := c.Connect(); token.Wait() && token.Error() != nil {
		panic(token.Error())
	}
	// 断开连接
	defer c.Disconnect(250)
	// 发布消息
	for {
		token := c.Publish(topic, 0, false, "小镇编码家")
		token.Wait()
		time.Sleep(1 * time.Second)
	}
}
TODO
- [X] 返回 JSON 测试数据
- [X] 线上部署
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式