首页 > 解决方案 > MQTT、Paho、IMqttAsyncClient、连接重试

问题描述

请就 Java 中的 IMqttAsyncClient 进行连接管理和重试提供建议

我看到连接选项包括自动重新连接,它在同步客户端中仅在建立初始连接时才起作用。

我没有看到关于 IMqttAsyncClient 行为的明确文档是初始连接失败。我是否需要在我的代码中为初始连接添加重试逻辑?

到目前为止,当我尝试按预期连接时,似乎会触发失败回调。但那我该怎么办?我是否需要自己编写一些重试逻辑?在后面的自动重新连接方案中,会发生重试。乍一看,一旦初始连接失败,就是这样。

我在失败回调中编写了重试代码

// my original connection method, re-used below from failure
... connect(... params ...) { 
         attempt connection using MqttAsyncClient.connect()
}
// callback
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
    // log failure here
    // User Context lets me know what we're trying to do
    if ( "connecting".equals(asyncActionToken.getUserContext()) 
            && ( ! myShutdownRequested ) ) {
        // log retrying and sleep a bit here
        connect(); // calling original connect method again
    }       
}

明确的问题

  1. 我有责任处理重试吗?考虑到自动尝试功能,这似乎很奇怪,但事实就是如此。
  2. 在哪种情况下从失败回调中调用 MqttAsyncClient.connect() 是安全的?

我没有找到关于任何一点的明确文档,并且“我试过了吗”没有涵盖第 2 点。如果存在微妙的竞争条件,任何问题都可能不会立即出现。到目前为止,它似乎工作得很好......

标签: javamqttpaho

解决方案


推荐阅读