Java Elasticsearch客户端结构

Java Elasticsearch客户端结构

问题描述:

这是一个结构问题(最佳实践是什么)。Java Elasticsearch客户端结构

我有一个域名站点的50个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)); 

--Inside在50个servlet的所有方法引用name.client instead--

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

而且,在我的doPost的底部(我发出了printWriter.println(结果后))我要关闭客户吗? client.close();

谢谢。

我不会将这些对象存储在类作用域中。我认为最好只在doPost开始时打开客户端连接,最后关闭它。通过这种方式,内存和网络资源仅在必要时才会被采用,而且您不必关心保持连接是否存活,从而使数据保持良好状态。除此之外,如果你想避免在你的所有类中重复代码,只需创建一个新的类(一种“助手”或“委托”,或任何你喜欢的名字),它包含一个方法连接作业,并返回客户端。再次,没有任何班级成员,只是方法中的一切。

更一般地,如果你想要更多的理论,我建议您阅读有关无国籍编程 Advantages of stateless programming?

+0

这使得有很大的意义,我从来没有想过。谢谢!^1 – Chris 2014-09-18 19:52:29