Java MQTT、Paho、IMqttAsyncClient、连接重试

Java MQTT、Paho、IMqttAsyncClient、连接重试,java,mqtt,paho,Java,Mqtt,Paho,请提供有关使用Java的IMqttAsyncClient进行连接管理和重试的建议 我看到连接选项包括自动重新连接,在同步客户端中,自动重新连接只有在建立初始连接时才起作用 我没有看到关于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
    }       
}
明确的问题

  • 我是否有责任处理重试?考虑到自动尝试功能,这似乎有些奇怪,但事实并非如此
  • 在这种情况下,从故障回调内部调用MqttAsyncClient.connect()是否安全
    我在这两个方面都没有找到明确的文档,而且“我试过了吗”并没有涵盖第2点。如果有一个微妙的比赛条件,任何问题可能不会立即出现。到目前为止,它似乎工作得很好……

    你试过测试它吗?@hardlib是的,我已经添加了更多细节,但是我真正关心的不是“什么工作”,而是我已经解释过的“应该工作什么”。我稍后会仔细看一看,但你可能会更好地询问泛美卫生组织开发人员的邮件列表(这样文档也可能会得到更新)好的一点!相比之下,这很容易。你们找到问题的答案了吗?我使用的是使用mqtt C库绑定的rust版本。我在连接失败时遇到随机分段错误。我想这可能是因为在循环中重试连接。你试过测试它吗?@hardlib是的,我已经添加了更多的细节,但是我真正关心的不是“什么工作”,而是我已经解释过的“什么应该工作”。我稍后会仔细看一看,但是你最好在Paho开发人员邮件列表中询问(这样文档也可能会得到更新)说得好!相比之下,这很容易。你们找到问题的答案了吗?我使用的是使用mqtt C库绑定的rust版本。我在连接失败时遇到随机分段错误。我认为这可能是因为在循环中重试连接。