paho.mqtt.golang
paho.mqtt.golang copied to clipboard
MQTT 连接失败: status can only transition to connecting from disconnected
opts.SetConnectionLostHandler(func(client mqtt.Client, err error) {
fmt.Println("连接丢失,尝试重新连接...:", err)
s.isDisconnect = true
})
//自动重连线程
go func() {
s.connect()
time.Sleep(15 * time.Second)
for {
if !s.client.IsConnected() || !s.client.IsConnectionOpen() || s.isDisconnect {
log.Printf("连接断开,尝试重新连接.IsConnected:%v,IsConnectionOpen:%v isDisconnect:%v\n",
s.client.IsConnected(),
s.client.IsConnectionOpen(),
s.isDisconnect)
s.client.Disconnect(100)
time.Sleep(15000 * time.Millisecond)
s.connect()
}
time.Sleep(15 * time.Second)
}
}()
func (s *MqttClientSverice) connect() {
if token := s.client.Connect(); token.Wait() && token.Error() != nil {
log.Println("MQTT 连接失败:", token.Error())
return
}
s.isDisconnect = false
log.Println("MQTT broker connected...")
for _, topic := range s.config.Topics {
if token := s.client.Subscribe(topic, 0, s.onMessageReceived); token.Wait() && token.Error() != nil {
log.Println("Error subscribing to topic:", token.Error())
} else {
log.Println("MQTT broker Subscribed topic:", topic)
}
}
}
这样写的重连机制有问题:MQTT 连接失败: status can only transition to connecting from disconnected 库内部认为状态不对,但是进程重启是可以重连的