gpt4 book ai didi

go - 在程序 MQTT 期间更改订阅主题

转载 作者:数据小太阳 更新时间:2023-10-29 03:22:24 25 4
gpt4 key购买 nike

我有一个 MQTT Go 程序订阅了主题 “info”,我在其中收到了一条 JSON 消息。我验证该 JSON 消息,如果验证成功,我想开始订阅新主题 “info_updates”。这是我的订阅代码:

func Info(){
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)

opts := MQTT.NewClientOptions().AddBroker("tcp://test.mosquitto.org:1883")

opts.SetDefaultPublishHandler(f)
topic := "info" //I want to be able to change this later to "info_updates"

opts.OnConnect = func(c MQTT.Client) {
if token := c.Subscribe(topic, 0, f); token.Wait() && token.Error() != nil {
panic(token.Error())
}
}
// Creating new client
client := MQTT.NewClient(opts)
if token := client.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error())
} else {
fmt.Printf("Connected to server\n")
}
<-c

}

这是我验证 JSON(部分)的代码:

var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {
var integrationResult string

if JSONValidate(msg.Payload())[0] == ""{ //sanity check = successful
integrationResult = "successful"
}else{ //sanity check = unsuccessful
integrationResult = "unsuccessful"
}

//do something here to tell the first function to change subscribing topic if integrationResult = "successful"

}

注意:func Info()MQTT.MessageHandler 位于两个单独的文件中。我对如何与 func Info() 通信以更改主题订阅感到困惑。谢谢你。

最佳答案

在我的 message.Handler 中,我执行以下操作:

if integrationResult == "unsuccessful"{
client.Subscribe("data_update/" + deviceID, 0, g)
}

其中 g 是一个新的 message.Handler。使用这种方法,我不确定第一个连接(订阅 info)是否断开,或者两个连接是否都打开。但是,如果您只是想从新主题中获取消息,这是个不错的方法。

关于go - 在程序 MQTT 期间更改订阅主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51505927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com