我有一个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()
通信以更改主题订阅而感到困惑。谢谢。
答案 0 :(得分:0)
在我的message.Handler
中,我这样做:
if integrationResult == "unsuccessful"{
client.Subscribe("data_update/" + deviceID, 0, g)
}
g
是新的message.Handler
。使用这种方法,我不确定第一个连接(对info
的订阅)是否断开连接,或者两个连接是否都打开。但是,如果您只是想从新主题中获取消息,这是一种很好的方法。