首页 文章 精选 留言 我的

精选列表

搜索[数据库连接池],共10038篇文章
优秀的个人博客,低调大师

Elasticsearch Java Client连接池

按照Elasticsearch API,在Java端使用是ES服务需要创建JavaClient,但是每一次连接都实例化一个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<String, Client> clientMap = new ConcurrentHashMap<String, Client>(); 30 31 private Map<String, Integer> ips = new HashMap<String, Integer>(); // hostname port 32 33 private String clusterName = WebServiceInit.clusterName; 34 35 private ClientHelper(String ip,Integer port) { 36 init(ip,port); 37 //TO-DO 添加你需要的client到helper 38 } 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 * 初始化默认的client 52 */ 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 * @return 66 */ 67 public List<InetSocketTransportAddress> getAllAddress(Map<String, Integer> ips) { 68 List<InetSocketTransportAddress> addressList = new ArrayList<InetSocketTransportAddress>(); 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);//通过集群名称得到一个Client 81 } 82 83 public void addClient(Settings setting, List<InetSocketTransportAddress> 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,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册