Как заставить Jest обрабатывать недоступный сервер ElasticSearch?

В настоящее время я настраиваю Jest, предоставляя ему список URI сервера. Как это:

 public JestClient jestClient() {
    final JestClientFactory factory = new JestClientFactory();
    factory.setHttpClientConfig(new HttpClientConfig
            .Builder(esServerUris)
            .build());
    final JestClient jestClient = factory.getObject();
    return jestClient;
}

Если один из моих серверов ElasticSearch отключается (например, из-за сбоя или технического обслуживания), то часть моих запросов Jest завершается ошибкой. Похоже, Jest по умолчанию не выполняет никакого интеллектуального управления соединениями. Он должен делать что-то вроде циклического перебора серверов или случайного выбора сервера.

Есть ли лучший способ справиться с этим?


person leros    schedule 12.11.2015    source источник


Ответы (1)


Вам нужно включить обнаружение, чтобы клиентская фабрика могла найти другой сервер в случае, если один из них выйдет из строя. Что-то вроде этого должно делать:

public JestClient jestClient() {
    final JestClientFactory factory = new JestClientFactory();
    factory.setHttpClientConfig(new HttpClientConfig
            .Builder(esServerUris)
            .discoveryEnabled(true)
            .discoveryFrequency(500l, TimeUnit.MILLISECONDS)
            .build());
    final JestClient jestClient = factory.getObject();
    return jestClient;
}

Вы также можете увидеть, как они это тестируют, в JestClientFactoryIntegrationTest.java, то есть они начинают с одного узла, затем добавляют еще 3 узла, затем отключают один узел и утверждают, что у клиента все еще есть действительное соединение с узлом, который вверх.

person Val    schedule 13.11.2015