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?
这使得有很大的意义,我从来没有想过。谢谢!^1 – Chris 2014-09-18 19:52:29