gpt4 book ai didi

Go AWS MQTT 连接在订阅完成前丢失

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

我在尝试连接到 AWS MQTT 时遇到间歇性问题。有时效果很好,有时效果不佳。当我连接时出现此错误:订阅完成前连接丢失

我真的不确定为什么会这样,一开始一切似乎都很好,但现在它经常抛出这个错误。这是我用来连接的代码:

type ServerConnection struct {
Cert tls.Certificate
Host string
Port int
Path string
Topic string
Qos int
Messages chan MQTT.Message
Control chan os.Signal
}

func (server *ServerConnection) Start() error {
cid := uuid.New().String()

connOpts := &MQTT.ClientOptions{
ClientID: cid,
CleanSession: true,
AutoReconnect: true,
MaxReconnectInterval: 1 * time.Second,
KeepAlive: 30000,
TLSConfig: tls.Config{Certificates: []tls.Certificate{server.Cert}},
}
connOpts.SetConnectTimeout(30 * time.Second)
connOpts.SetDefaultPublishHandler(func(client MQTT.Client, msg MQTT.Message) {
server.Messages <- msg
})
brokerURL := fmt.Sprintf("tcps://%s:%d%s", server.Host, server.Port, server.Path)
connOpts.AddBroker(brokerURL)
mqttClient := MQTT.NewClient(connOpts)
if token := mqttClient.Connect(); token.Wait() && token.Error() != nil {
return token.Error()
}
// Subscribe
go func() {
log.Printf("subscribing")
if token := mqttClient.Subscribe(server.Topic, byte(server.Qos), nil); token.Wait() && token.Error() != nil {
fmt.Println(token.Error())
os.Exit(1)
}
log.Printf("subscribed")

}()
server.ProcessMessages()
log.Println("[MQTT] Connected")
quit := make(chan struct{})
signal.Notify(server.Control, os.Interrupt)
go func() {
<-server.Control
mqttClient.Disconnect(250)
fmt.Println("[MQTT] Disconnect")
quit <- struct{}{}
}()
<-quit

return nil

}

最佳答案

基本上您需要将订阅方法调用放在 onConnectHandler 中,这将确保在成功连接(并重新连接)时调用订阅处理程序在客户端选项中定义。

关于Go AWS MQTT 连接在订阅完成前丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48832131/

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