【Elasticsearch】Java Client连接池
2016-05-05 13:22
881 查看
按照Elasticsearch API,在Java端使用是ES服务需要创建Java Client,但是每一次连接都实例化一个client,对系统的消耗很大,即使在使用完毕之后将client close掉,由于服务器不能及时回收socket资源,极端情况下会导致服务器达到最大连接数。
为了解决上述问题并提高client利用率,可以参考使用池化技术复用client。
为了解决上述问题并提高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<String, Client> clientMap = new ConcurrentHashMap<String, Client>(); private Map<String, Integer> ips = new HashMap<String, Integer>(); // 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<InetSocketTransportAddress> getAllAddress(Map<String, Integer> ips) { List<InetSocketTransportAddress> addressList = new ArrayList<InetSocketTransportAddress>(); 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<InetSocketTransportAddress> transportAddress) { Client client = new TransportClient(setting) .addTransportAddresses(transportAddress .toArray(new InetSocketTransportAddress[transportAddress.size()])); clientMap.put(setting.get("cluster.name"), client); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树