Автосоединение с несколькими URI сервера - PullRequest
0 голосов
/ 29 августа 2018

Рассмотрим сценарий, где у меня есть код ниже.

MqttConnectOptions connOpt = new MqttConnectOptions();
connOpt.setServerURIs(new String[]{"tcp://localhost:1883", "tcp://some-other-host:1883"});
connOpt.setAutomaticReconnect(true);
client.setCallback( new TemperatureSubscriber() );
client.connect(connOpt);

Поэтому, когда я говорю «подключиться», он подключается к локальному хосту. Тогда я теряю связь по любой причине. Так что в данный момент, так как automaticReconnect имеет значение true, будет ли оно подключаться к локальному хосту или к другому хосту?

1 Ответ

0 голосов
/ 31 августа 2018

Позвольте мне показать, как найти такие ответы самостоятельно -

Сначала вы посещаете репозиторий Github для исходного кода Paho .

Затем вы вводите setAutomaticReconnect в поле поиска:

browser screenshot 1

Это, конечно, просто публичное имя. Вам нужно найти соответствующего частного участника.

В MqttConnectOptions.java с очень простым кодом, который вы найдете для этого члена:

private boolean automaticReconnect = false;

Затем вы выполняете другой поиск, на этот раз для automaticReconnect слова:

browser screenshot 2

И это приводит вас к подсказке в файле MqttAsyncClient.java -

    // Insert our own callback to iterate through the URIs till the connect
    // succeeds
    MqttToken userToken = new MqttToken(getClientId());
    ConnectActionListener connectActionListener = new ConnectActionListener(this, persistence, comms, options,
            userToken, userContext, callback, reconnecting);
    userToken.setActionCallback(connectActionListener);
    userToken.setUserContext(this);

Наконец, в файле ConnectActionListener.java вы можете подтвердить, что URL-адреса пробуются один за другим:

  /**
   * The connect failed, so try the next URI on the list.
   * If there are no more URIs, then fail the overall connect. 
   * 
   * @param token the {@link IMqttToken} from the failed connection attempt
   * @param exception the {@link Throwable} exception from the failed connection attempt
   */
  public void onFailure(IMqttToken token, Throwable exception) {

    int numberOfURIs = comms.getNetworkModules().length;
int index = comms.getNetworkModuleIndex();
    ...
    ...
 comms.setNetworkModuleIndex(index + 1);
...