MQTT go 客户端发布消息

文章目录

    为了方便客户端测试,搭建好 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式