Golang MQTT的使用 实现发布订阅

Golang MQTT的使用 实现发布订阅

Eclipse Paho MQTT Go Client 为 Eclipse Paho 项目下的 Go 语言版客户端库,该库能够连接到 MQTT Broker 以发布消息,订阅主题并接收已发布的消息,支持完全异步的操作模式。

官方源代码地址: github.com/eclipse/paho.mqtt.golang

Go应用使用mqtt通信协议的时候, 是作为client端使用的, server端自然需要一个服务来承载, 有很多软件提供MQTT协议支持, 比如mosquitto mqtt, emqx, smqtt, rabbitmq mqtt, pulsar mop mqtt等等.

MQTT服务安装

Centos离线安装RabbitMQ并开启MQTT

Linux安装mosquitto mqtt几种方式

emqx broker安装

docker安装SMQTT

Golang使用MQTT

#下载MQTT依赖包
go get github.com/eclipse/paho.mqtt.golang

Go 语言的 Paho MQTT 连接 EMQX Broker例子,并进行消息收发

package main

import (
	"fmt"
	uuid "github.com/satori/go.uuid"
	"os"
	"strings"
	"time"

	"github.com/eclipse/paho.mqtt.golang"
)

var fallbackFun mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
	//打印收到的topic和内容
	fmt.Printf("topic: %s\n", msg.Topic())
	fmt.Printf("msg: %s\n", msg.Payload())
	//收到的topic $test/msg/liang/get

	//处理发布的topic  $abcd/msg/liang/set
	split := strings.Split(msg.Topic(), "/")
	liang := split[2]

	setTopic := "$abcd/msg/" + liang + "/set"

	//处理要发送的数据
	data := "{\"msg\":\"hello\"}"

	// 处理完之后 发布消息 $abcd/msg/liang/set
	client.Publish(setTopic, 0, false, data)
}

func main() {
	clientId := uuid.NewV4()
	opts := mqtt.NewClientOptions().AddBroker("tcp://192.168.1.8:1883").SetClientID(fmt.Sprintf("%s", clientId))

	opts.SetKeepAlive(60 * time.Second)
	// 设置消息回调处理函数 fallbackFun
	opts.SetDefaultPublishHandler(fallbackFun)
	opts.SetPingTimeout(1 * time.Second)

	c := mqtt.NewClient(opts)
	if token := c.Connect(); token.Wait() && token.Error() != nil {
		panic(token.Error())
	}

	// 订阅主题 $test/msg/#
	if token := c.Subscribe("$test/msg/#", 0, nil); token.Wait() && token.Error() != nil {
		fmt.Println(token.Error())
		os.Exit(1)
	}

	select {

	}

	// 断开连接
	c.Disconnect(250)
	time.Sleep(1 * time.Second)
}

参考链接:
https://www.emqx.io/docs/zh/v4.4/development/go.html#mqtt-go-%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B

https://blog.justwe.site/post/tcp-mqtt/

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond阿亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值