我们有一个基于IoT的应用程序设备,它被配置为通过MQTT桥从谷歌、AWS和Azure等各种服务提供商与我们的仪表板进行通信。
所以流程是:
发布和订阅消息使用MQTT QOS 1服务。
Observation:
AWS和Azure在上面的流程中运行良好,但是设备在3到5次成功的迭代之后停止接收来自Google桥的消息,尽管我们的仪表板将消息发布到Google IoT MQTT桥。
对于Google,我们已经发现,与Azure和AWS相比,控制流是不同的。
对于Google,在等待接收消息之前,我们需要每次订阅和取消订阅给定的主题,而对于AWS和Azure,我们需要在打开MQTT连接期间订阅一次。
发行:
有时5秒设备超时发生,因为它无法从Google桥接收订阅主题的消息。添加多次重试以克服超时问题是不成功的,因为问题仍然存在,因为设备在开机45-60秒后无法接收来自Google桥的消息。
发布于 2018-04-14 21:59:02
我也使用谷歌物联网核心,在使用paho mqtt包时,mqtt客户端的设备端代码是golang。这个客户端包支持OnConnect处理程序,在使用这个处理程序时,我实现了我认为您正在寻找的恢复。通过这个处理程序,我重新订阅了"config“主题。
我认为google没有保存客户所订阅的订阅,因此客户端在成功连接时需要重新订阅。
发布于 2018-07-10 08:24:46
这是我使用过的golang代码(受gingi007回答的启发,谢谢!)
var onConn MQTT.OnConnectHandler
onConn = func(client MQTT.Client) {
fmt.Println("connected")
client.Subscribe(topic.Config, 1, handlerFunc)
}
mqttOpts.SetOnConnectHandler(onConn)
client := MQTT.NewClient(mqttOpts)
这样,配置更新就会源源不断地流到我的设备上,而如果您在onConnectHandler之外订阅,则在连接时只会收到一个配置更新。
https://stackoverflow.com/questions/49774280
复制相似问题