Elasticsearch Java Client连接池
来源:互联网 发布:简明python基础教程 编辑:程序博客网 时间:2024/04/23 16:05
按照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<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); }}
0 0
- Elasticsearch Java Client连接池
- ElasticSearch java API--创建Client连接
- elasticsearch java api 创建客户端连接(Transport Client)
- elasticsearch java client
- Elasticsearch Java Client入门
- elasticsearch获取java client实例
- elasticsearch获取java client实例
- Elasticsearch java client 获取mapping
- elasticsearch-java api之client
- 连接ElasticSearch获取客户端client时报错
- spark连接es的问题java.lang.ClassNotFoundException:org.elasticsearch.client.transport.NoNodeAvailableExcep
- Java连接elasticsearch
- java连接ElasticSearch集群
- Elasticsearch[2.0] ☞ Java Client API
- Elasticsearch java API (5)Transport Client
- elasticsearch client java 简单code 应用
- java elasticsearch 5.4.0 x-pack client
- elasticsearch for java【教程一Client】
- JavaScript学习总结(十二)——JavaScript编写类
- 对iOS锁的一些研究
- a.out的由来
- 【深入理解JVM】:OutOfMemoryError异常总结
- linux 上端口占用的程序
- Elasticsearch Java Client连接池
- Centos 7上为Dell R730服务器挂载RAID10硬盘的过程
- JavaScript学习总结(十三)——极简主义法编写JavaScript类
- poj1759 Garland
- Rails Cookies与Session操作汇总
- JavaScript学习总结(十四)——JavaScript编写类的扩展方法
- 【fastweixin框架教程3】JAVA进行HTTPS网站访问,PKIX path building failed解决方法
- 翻译mos文章rac脑裂导致节点的驱逐
- 超简单socket客户端例子