博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Elasticsearch Java Client连接池
阅读量:6226 次
发布时间:2019-06-21

本文共 3055 字,大约阅读时间需要 10 分钟。

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

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

1 import java.io.IOException; 2 import java.net.InetSocketAddress; 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 import java.util.concurrent.ConcurrentHashMap; 8  9 import org.elasticsearch.client.Client;10 import org.elasticsearch.common.settings.Settings;11 import org.elasticsearch.common.transport.InetSocketTransportAddress;12 import org.elasticsearch.common.xcontent.XContentBuilder;13 import org.elasticsearch.common.xcontent.XContentFactory;14 import org.elasticsearch.index.mapper.Mapping;15 import org.elasticsearch.transport.client.PreBuiltTransportClient;16 17 import com.chinadigitalvideo.esagent.servlet.WebServiceInit;18 19 /**20  * Created by tgg on 16-3-17.21  */22 public class ClientHelper {23     private static String ip;24     private static int port;25 26     private Settings setting;27     private Mapping mapping;28     29     private Map
clientMap = new ConcurrentHashMap
();30 31 private Map
ips = new HashMap
(); // hostname port32 33 private String clusterName = WebServiceInit.clusterName;34 35 private ClientHelper(String ip,Integer port) {36 init(ip,port);37 //TO-DO 添加你需要的client到helper38 }39 40 public static final ClientHelper getInstance(String ipConf ,Integer portConf) {41 ip=ipConf;42 port=portConf;43 return ClientHolder.INSTANCE;44 }45 46 private static class ClientHolder {47 private static final ClientHelper INSTANCE = new ClientHelper(ip,port);48 }49 50 /**51 * 初始化默认的client52 */53 public void init(String ip,int port) {54 55 ips.put(ip, port);56 setting =Settings.builder()57 .put("client.transport.sniff",true)58 .put("cluster.name",clusterName).build();59 addClient(setting, getAllAddress(ips));60 }61 62 /**63 * 获得所有的地址端口64 *65 * @return66 */67 public List
getAllAddress(Map
ips) {68 List
addressList = new ArrayList
();69 for (String ip : ips.keySet()) {70 addressList.add(new InetSocketTransportAddress(new InetSocketAddress(ip, ips.get(ip))));71 }72 return addressList;73 }74 75 public Client getClient() {76 return getClient(clusterName);77 }78 79 public Client getClient(String clusterName) {80 return clientMap.get(clusterName);//通过集群名称得到一个Client81 }82 83 public void addClient(Settings setting, List
transportAddress) {84 Client client = new PreBuiltTransportClient(setting)85 .addTransportAddresses(transportAddress.toArray(new InetSocketTransportAddress[transportAddress.size()]));86 87 clientMap.put(setting.get("cluster.name"), client);88 }89 }

 

本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/6710081.html,如需转载请自行联系原作者

你可能感兴趣的文章
EXTJS4-----前言
查看>>
iOS11里判断Safari浏览器是无痕模式还是正常模式?
查看>>
zookeeper与kafka安装部署及java环境搭建(发布订阅模式)
查看>>
error C2244 "无法将函数定义与现有的声明匹配"的解决方法
查看>>
记一个 dubbo中hessian2反序列化 Map 的一个问题
查看>>
HDU_1505_矩阵中的最大矩形_dp
查看>>
HDU_1398_母函数
查看>>
leetcode_1039. Minimum Score Triangulation of Polygon_动态规划
查看>>
mysql 将时间戳与日期时间的转换
查看>>
个人作业-Week2 案例分析
查看>>
SVN提交错误及使用技巧
查看>>
服务器程序和应用程序
查看>>
hibernate执行过程
查看>>
C++专题(一)
查看>>
博客园。侧边公告代码
查看>>
[codevs3118]高精度除法<高精度>
查看>>
学JS的心路历程-闭包closure
查看>>
本周总结
查看>>
苹果企业账号申请
查看>>
Problem O
查看>>