paho.mqtt.golang icon indicating copy to clipboard operation
paho.mqtt.golang copied to clipboard

MQTT 连接失败: status can only transition to connecting from disconnected

Open erroot opened this issue 11 months ago • 3 comments

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 库内部认为状态不对,但是进程重启是可以重连的

erroot avatar Mar 12 '24 01:03 erroot