2

現在、サーバー URI のリストを指定して Jest を構成しています。このような:

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

ElasticSearch サーバーの 1 つがオフラインになると (障害やメンテナンスなど)、Jest クエリの一部が失敗します。Jest は、デフォルトでは、インテリジェントな接続管理を一切行っていないようです。サーバーを介してラウンドロビンのようなことを行うか、ランダムにサーバーを選択する必要があります。

これを処理するより良い方法はありますか?

4

1 に答える 1

5

サーバーがダウンした場合にクライアント ファクトリが別のサーバーを検出できるように、検出を有効にする必要があります。このようなことをする必要があります:

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 つのノードを追加し、1 つのノードを停止して、稼働中のノードへの有効な接続がクライアントにあることをアサートします。

于 2015-11-13T04:27:17.317 に答える