问题描述
我的 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 本身,也可以只是代表端点的枚举。