MQTT go 客户端发布消息

更新日期: 2022-07-12 阅读次数: 2696 字数: 260 分类: golang

为了方便客户端测试,搭建好 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] 线上部署

tags: MQTT

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式