es java 连接池_【Elasticsearch】Java Client连接池

按照 Elasticsearch API,在 Java 端使用是 ES 服务需要创建Java Client,但是每一次连接都实例化一个 client,对系统的消耗很大,即使在使用完毕之后将 client close 掉,由于服务器不能及时回收 socket 资源,极端情况下会导致服务器达到最大连接数。

为了解决上述问题并提高 client 利用率,可以参考使用池化技术复用 client。

import org.elasticsearch.client.Client;

import org.elasticsearch.client.transport.TransportClient;

import org.elasticsearch.common.settings.ImmutableSettings;

import org.elasticsearch.common.settings.Settings;

import org.elasticsearch.common.transport.InetSocketTransportAddress;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.concurrent.ConcurrentHashMap;

/**

* Created by tgg on 16-3-17.

*/

public class ClientHelper {

private Settings setting;

private Map clientMap = new ConcurrentHashMap();

private Map ips = new HashMap(); // hostname port

private String clusterName = “elasticsearch“;

private ClientHelper() {

init();

//TO-DO 添加你需要的 client 到 helper

}

public static final ClientHelper getInstance() {

return ClientHolder.INSTANCE;

}

private static class ClientHolder {

private static final ClientHelper INSTANCE = new ClientHelper();

}

/**

* 初始化默认的 client

*/

public void init() {

ips.put(“127.0.0.1”, 9300);

setting = ImmutableSettings

.settingsBuilder()

.put(“client.transport.sniff”,true)

.put(“cluster.name”,”elasticsearch”).build();

addClient(setting, getAllAddress(ips));

}

/**

* 获得所有的地址端口

*

* @return

*/

public List getAllAddress(Map ips) {

List addressList = new ArrayList();

for (String ip : ips.keySet()) {

addressList.add(new InetSocketTransportAddress(ip, ips.get(ip)));

}

return addressList;

}

public Client getClient() {

return getClient(clusterName);

}

public Client getClient(String clusterName) {

return clientMap.get(clusterName);

}

public void addClient(Settings setting, List transportAddress) {

Client client = new TransportClient(setting)

.addTransportAddresses(transportAddress

.toArray(new InetSocketTransportAddress[transportAddress.size()]));

clientMap.put(setting.get(“cluster.name”), client);

}

}

露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权

转载请注明原文链接:【Elasticsearch】Java Client连接池

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值