MQTT,Paho,IMqttAsyncClient,连接重试

时间:2019-12-10 10:41:18

标签: java mqtt paho

请提供有关使用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点。如果存在微妙的比赛条件,任何问题都可能不会立即出现。到目前为止,它似乎运行良好...

0 个答案:

没有答案