gpt4 book ai didi

Java Elasticsearch 客户端结构

转载 作者:行者123 更新时间:2023-12-01 12:31:03 25 4
gpt4 key购买 nike

这是一个结构问题(使用的最佳实践是什么)。

我管理的域站点有 50 个 Servlet,客户端对 java Servlet 进行 js 调用,java Servlet 依次调用 ElasticSearch,然后 servlet 响应客户端。

在每个 servlet 中,紧接着类名之后,我为 ES 连接创建静态设置和客户端配置。这是因为在每个 servlet 中可能有 2 个或更多方法调用相同的 ES 集群,而我不想在每个方法中创建此配置。

/**
* Servlet implementation class Results
*/
@WebServlet("/Results")
public class Results extends HttpServlet {
private static final long serialVersionUID = 1L;
Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elastictest").build();
Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("143.79.236.xxx", 9300));

但是,现在我想知道我应该这样做 50 次(每个类顶部有 1 个配置)吗?或者我是否创建一个具有相同配置的新 java 类,并在每个 servlet 中引用该一个新 java 类?这会节省内存并更好地练习吗?

**--Inside name.java --**

public static Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elastictest").build();
public static Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("143.79.236.xxx", 9300));

--50 个 servlet 中的所有方法都引用 name.client --

SearchResponse response = name.client.prepareSearch().setQuery(......

另外,在我的 doPost 底部(在我发送 printWriter.println(results) 之后)我是否关闭客户端?客户端.close();

谢谢。

最佳答案

我不会将这些对象存储在类范围内。我认为最好只在 doPost 开始时打开客户端连接,并在最后关闭它。这样,内存和网络资源仅在必要时才被占用,并且您不必关心保持连接 Activity 、保持数据处于良好状态。

除此之外,如果您想避免在所有类中重复代码,只需创建一个新类(类似于“帮助器”或“委托(delegate)”,或将其命名为您喜欢的任何名称),其中包含执行以下操作的方法连接作业,并返回客户端。同样,没有任何类成员,只有方法中的所有内容。

更一般地说,如果您想要更多理论,我建议阅读无状态编程 Advantages of stateless programming?

关于Java Elasticsearch 客户端结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25917466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com