当应用程序调用多个 Elasticsearch 端点时初始化 JestClient

Initializing JestClient when application calls multiple Elasticsearch endpoints

我的 API 目前使用 JestClient 调用一个 Elasticsearch 端点。我想添加一些需要调用第二个不同的 Elasticsearch 端点的功能。当您必须在初始化 JestClient 时指定端点时,这怎么可能?

@Provides
@Singleton
public JestClient jestClient() {
    JestClientFactory factory = new JestClientFactory();
    factory.setHttpClientConfig(
      new HttpClientConfig.Builder("http://localhost:9200")
        .build());
    return factory.getObject();
}

我的应用程序设计使用 Singleton 类 进行这些初始化,所以除了为我的第二个端点使用不同的 Elasticsearch 客户端之外,我不确定如何解决这个问题。

您可以根据参数创建工厂和 return 客户端。 该参数可以是 url 本身,也可以只是代表端点的枚举。

或者您可以创建两个客户端,并根据调用 classes 时的用例,如果您需要两个客户端,则注入两个客户端,或者如果您需要一个特定的客户端,则将该客户端注入您的class,你只需要为你的客户端起一个不同的名字(比如 clientv2 代表 es 2 版本,clientv5 代表 ES 5.x 版本),这也很容易,因为你知道你的用例并了解您的 classes.

中需要的所有客户端版本

附带说明一下,JEST 的积极开发很久以前就停止了,现在 elasticsearch 提供了官方 java 客户端 Java high level rest client,所以恕我直言,你应该切换到 JHLRC 以获得最大受益并使未来的迁移变得容易,我认为这是你的用例。