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

问题描述

我的 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 客户端之外,我不知道如何解决这个问题。

解决方法

或者您可以创建两个客户端,并根据调用类中的用例,如果您需要两个客户端,则注入两个客户端,或者如果您需要一个特定客户端,则将该客户端注入您的类中,您只需要拥有一个不同的名称(如 es 2 版本的 clientv2 和 ES 5.x 版本的 clientv5)让您的客户端使其工作,这也很容易,因为您知道您的用例并知道所有版本的客户端都需要什么您的课程。

顺便说一句,JEST的积极开发早就停止了,现在elasticsearch提供了官方的java客户端Java high level rest client,所以恕我直言,你应该切换到JHLRC以获得最大的好处并进行未来的迁移很简单,我认为这就是您的用例。

,

您可以创建一个工厂并根据参数返回客户端。 参数可以是 url 本身,也可以只是代表端点的枚举。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...