2015-11-12 2 views
1

В настоящее время я настроил Jest, предоставив ему список URI сервера. Как это:Как я могу заставить Jest обрабатывать сервер ElasticSearch недоступным?

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

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

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

ответ

3

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

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 узлов, а затем привести один узел вниз и утверждает, что клиент все еще имеет действительное соединение с узлом, который находится вверх.

+0

@leros, вам повезло с этим? – Val

Смежные вопросы