码迷,mamicode.com
首页 > 其他好文 > 详细

elasticsearch 客户端的建立

时间:2016-05-06 00:29:45      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

一般情况下,我们可以用如下方法获取一个java client。

1
2
3
4
5
6
7
8
9
    public Client getTransportClient(){
 
        // 设置client.transport.sniff为true来使客户端去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中,
        // 这样做的好处是一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器。
        Settings settings = ImmutableSettings.settingsBuilder().put(m).put("cluster.name",clusterName).put("client.transport.sniff", true).build();
        Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(host, port));
 
        return client;
    }

或者 如下方法:

 

1
2
3
4
5
6
7
8
9
    public Client getEmbeddedClient(){
        NodeBuilder nodeBuilder = new NodeBuilder();
 
      Node node = nodeBuilder.loadConfigSettings(false).clusterName(clusterName).local(true).node();
//      Node node = nodeBuilder.loadConfigSettings(false).clusterName(clusterName).node();
      Client client = node.client();
 
      return client;
    }

这种在测试环境下没有问题,但是在线上环境下会出问题,会出现内存溢出和超时等问题。
建议采用如下方法获取java client实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
 
    static Map<String, String> m = new HashMap<String, String>();
    // 设置client.transport.sniff为true来使客户端去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中,
    static Settings settings = ImmutableSettings.settingsBuilder().put(m).put("cluster.name",clusterName).put("client.transport.sniff", true).build();
 
    // 创建私有对象
    private static TransportClient client;
 
    static {
        try {
            Class<?> clazz = Class.forName(TransportClient.class.getName());
            Constructor<?> constructor = clazz.getDeclaredConstructor(Settings.class);
            constructor.setAccessible(true);
            client = (TransportClient) constructor.newInstance(settings);
            client.addTransportAddress(new InetSocketTransportAddress(host, port));
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }
 
    // 取得实例
    public static synchronized TransportClient getTransportClient() {
        return client;
    }

java client 会创建一个连接池,所以用完后不要关闭,下次可以直接复用。采用单例模式,可以保证应用只产生一个实例。
采用java反射的方法生成一个client ,效率明显高于由于new 一个客户端。

 

elasticsearch 客户端的建立

标签:

原文地址:http://www.cnblogs.com/bmaker/p/5463882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!