2017-03-14 57 views
0

目前這在paho java庫中不受支持,但我在我們的應用程序中需要此功能。例如,在應用程序啓動時,我們沒有網絡連接,但在30秒左右後,我們建立了連接,因此我希望我的客戶端能夠自動連接。第一次連接 - 重新連接

我的問題是 - 什麼是最好的方法來實現這一目標?我到目前爲止嘗試的是在連接方法出現問題時嘗試重新連接。而且由於我們使用RxJava,我已經計劃執行負責客戶端連接的相同方法。如果我粘貼代碼會更容易。

private void connect(String brokerUrl) { 
try { 

    LOG.info("Connecting to the broker..."); 
    mqttClient.connect(connectionOptions, "Connecting", new IMqttActionListener() { 

     @Override 
     public void onSuccess(IMqttToken asyncActionToken) { 
      LOG.info("Successfully conected to the broker."); 
     } 

     @Override 
     public void onFailure(IMqttToken asyncActionToken, Throwable exception) { 
      LOG.error("Failed to connect to broker. Trying to reconnect in {} milliseconds...", connectionRetryTimeout, exception); 
      // try to reconnect in few seconds 
      Schedulers.io().scheduleDirect(() -> connect(brokerUrl), connectionRetryTimeout, TimeUnit.MILLISECONDS); 
     } 
    }); 

} catch (MqttException e) { 
    LOG.error("Connection error.", e); 
} 
} 

發生這樣的事情是什麼,當網絡連接可用我設法自動連接,但第二個線程創建了繼續重試連接到代理。有沒有人已經實施這個,或者你有任何其他建議?

回答

0

最好的辦法是儘快落實通知您回調(基於異步事件)爲德網絡可用再次

interface INetworkCallback{ 

    void onNetworkStateChange(boolean newState); 

} 

和地方實現接口在第一

+0

那麼,網絡連接不可用當出現問題時,連接只是一種可能的情況。當我們嘗試連接時,可能發生經紀人倒閉。 – BojanSM