当前位置: 首页 > wzjs >正文

asp.net 网站登陆设计ebay欧洲站网址

asp.net 网站登陆设计,ebay欧洲站网址,广州购物网站,如何构建个人网站Apache HttpClient是由Apache软件基金会维护的一款开源HTTP客户端库,对比最基础的 HttpURLConnection 而言,它的优势时支持连接池管理,拦截器(Interceptor)机制,同步/异步请求支持等能力。 在使用这个组件时&#xff…

Apache HttpClient是由Apache软件基金会维护的一款开源HTTP客户端库,对比最基础的 HttpURLConnection 而言,它的优势时支持连接池管理,拦截器(Interceptor)机制,同步/异步请求支持等能力。

在使用这个组件时,需要格外注意连接池相关的配置,否则容易踩坑。

踩坑案例

问题

一个对外转发请求的项目,部分渠道的对接使用了HttpClient来实现的,由于业务访问量不大,上线后只部署了几台服务,前段时间三方平台曝光量增加,导致业务量比平时多了一倍,随后这个服务出现了问题:

从APM监控上看,上游调用该服务的请求有大量的超时,但是该服务只是请求转发而已,从http组件监控看该服务调三方接口的请求的RT也有明显增大,还有一部分请求出现了超时。但是该服务的CPU JVM资源指标都比较正常,而且项目中有多个平台的对接业务,目前只有这个平台的请求是有问题的。

排查过程

起初怀疑是网络抖动,但是找运维看了说网络延迟是正常的没有抖动,即便如此,还是觉得是网络不好导致请求hold住了(从apm看请求超时报错时间都比较久应该是配置的不太合理),顺着思路想着先扩容试试吧,扩容后发现起初是有效果的,但是过了一会儿又开始出现超时的请求了。

查到这感觉不像是网络原因了,只能翻代码了,随后翻了一下代码现状和关于HttpClient的连接池配置资料,找到了问题的原因......

问题1:HttpClient的连接池只设置了全局最大连接MaxTotal,但是未设置单路由的最大连接defaultMaxPerRoute(默认只有2)。在并发情况下,同路由下的没有空闲连接就会导致一直阻塞等待,直到获取到连接才能进行请求,所以超时的请求其实是在等待获取连接,并不是等待三方响应超时。


问题2:只有这个渠道的对接用了HttpClient,其他渠道直接用RestTemplate实现的。这就可以解释为什么只有这个平台的请求是有问题了
 

下面整理一下httpClient相关的配置,避免以后踩坑。

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
import tech.yummy.common.caja.tools.utils.BizThreadPoolUtils;import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;@Slf4j
public class HttpClientUtils {private static  CloseableHttpClient httpClient;private static PoolingHttpClientConnectionManager clientConnectionManager;private static SSLConnectionSocketFactory sslConnectionSocketFactory;private static SSLContextBuilder sslContextBuilder;private static String encoding;private static final String HTTP = "http";private static final String HTTPS = "https";static {try {encoding = "UTF-8";Registry<ConnectionSocketFactory> registry = initConnectionSocketFactoryRegistry();clientConnectionManager = new PoolingHttpClientConnectionManager(registry);// 创建连接池(默认 maxTotal=20, defaultMaxPerRoute=2 validateAfterInactivity=2000)clientConnectionManager = new PoolingHttpClientConnectionManager(registry);//覆盖默认配置 全局最大连接数 500clientConnectionManager.setMaxTotal(500);//覆盖默认配置 每路由默认连接数 50clientConnectionManager.setDefaultMaxPerRoute(50);//覆盖默认配置 连接在池中闲置多久后需要验证其有效性 5秒clientConnectionManager.setValidateAfterInactivity(5000);RequestConfig requestConfig = RequestConfig.custom()//从连接池获取连接的超时时间 - 连接池满时会阻塞等待,超时拿不到链接会抛     ConnectionPoolTimeoutException.setConnectionRequestTimeout(2000)//建立TCP连接的超时时间(握手).setConnectTimeout(1000)//数据传输的间隔超时时间.setSocketTimeout(3000).build();httpClient = HttpClientBuilder.create().useSystemProperties().setConnectionManager(clientConnectionManager).setDefaultRequestConfig(requestConfig).build();} catch (Exception e) {log.error("初始化httpclient 配置执行异常", e);}}private static Registry<ConnectionSocketFactory> initConnectionSocketFactoryRegistry() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {sslContextBuilder = new SSLContextBuilder();// 全部信任 不做身份鉴定sslContextBuilder.loadTrustMaterial(null, new TrustStrategy() {@Overridepublic boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {return true;}});sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build(),null,null,NoopHostnameVerifier.INSTANCE);Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register(HTTP, new PlainConnectionSocketFactory()).register(HTTPS, sslConnectionSocketFactory).build();return registry;}private static String request(HttpUriRequest request) throws IOException {ResponseHandler<String> responseHandler = response -> {int status = response.getStatusLine().getStatusCode();log.debug("response status:{}", status);HttpEntity entity = response.getEntity();return entity != null ? EntityUtils.toString(entity, encoding) : null;};log.debug("httpClient request:{} {}", request.getMethod(), request.getURI());String responseBody = httpClient.execute(request, responseHandler);log.debug("httpClient response:{}", responseBody);return responseBody;}//======================================================GET Start====================================================================public String get(String url, String params) throws IOException {if (!StringUtils.isBlank(params)) {url = url.concat("?").concat(params);}HttpGet httpGet = new HttpGet(url);return request(httpGet);}public static String get(String url, String params, Map<String, String> headers) throws IOException {if (!StringUtils.isBlank(params)) {url = url.concat("?").concat(params);}HttpGet httpGet = new HttpGet(url);if (headers != null) {headers.forEach(httpGet::setHeader);}return request(httpGet);}//======================================================GET End====================================================================//======================================================POST Start====================================================================/*** POST -> JSON 通用*/public static String post(String url, String rawContents, Map<String, String> headers) throws IOException {HttpPost httpPost = new HttpPost(url);HttpEntity entity = new StringEntity(rawContents, encoding);httpPost.setEntity(entity);if (headers != null) {headers.forEach(httpPost::setHeader);}return request(httpPost);}//======================================================POST End====================================================================public static void main(String[] args) throws IOException, InterruptedException {String url = "https://www.test.com";Map<String, String> headers = new HashMap<>();headers.put("Content-Type", "application/json");headers.put("charset", "UTF-8");headers.put("token", "ST-10384-3D0AQqHag-QqmKby4Upyu6YdB4f45fcc9-9qjdd");//参数String postParam = "{\"pageNum\":1,\"pageSize\":10}";for(int i = 0;i < 7;i++){String finalUrl = url;BizThreadPoolUtils.submit(() ->{long start = System.currentTimeMillis();try {String postResponse = HttpClientUtils.post(finalUrl, postParam, headers);log.info("请求耗时:{},返回值:{}",(System.currentTimeMillis() - start),postResponse);} catch (Exception e) {log.error("耗时:" + (System.currentTimeMillis() - start) + ",异常:" + e);}});}Thread.sleep(10000);String params = "page=1&size=10";String getResponse = HttpClientUtils.get(url, params, headers);System.out.println(getResponse);}}

 

http://www.dtcms.com/wzjs/62916.html

相关文章:

  • 灰色 网站贷款客户大数据精准获客
  • 网站优化公司百度竞价怎么做效果好
  • 仁怀那里可以做网站国内新闻最新消息10条
  • dwcc2017做网站教程百度一下官网搜索引擎
  • 最新73种暴利产品竞价单页网站制作带订单后台系统模板服务营销策划方案
  • 网站建设的战略作用亚洲精华国产精华液的护肤功效
  • 徐州网站推广百度指数怎么查询
  • 网站建设排行榜推广网站
  • java做视频网站的需求品牌营销策略有哪些方法
  • 无网站做cpa推广东莞百度seo哪里强
  • 如何诊断网站关键词竞价排名
  • 阿里建站官网营销网站建设多少钱
  • 苏州企业宣传片制作公司北京seo软件
  • 网络营销的特征优化排名推广教程网站
  • 网站如何做流量什么叫seo优化
  • 河南app手机网站制作安康seo
  • 万盛集团网站建设网站的推广优化
  • wordpress 插件 图片上传优化营商环境指什么
  • 广州做网站哪家好短链接生成
  • 徐州 网站 备案 哪个公司做的好近三天发生的重要新闻
  • 做行业网站赚钱宁波seo搜索排名优化
  • 门户网站怎么做十大推广app平台
  • 苏州专业做网站的公司哪家好武汉竞价托管公司
  • 开发网站的硬件成本百度大搜是什么
  • 利用jquery做音乐网站巩义网络推广外包
  • 怎么投诉做网站的公司发稿吧
  • 三水顺德网站建设南京seo招聘
  • design中国官网上海营销seo
  • 福州网建公司北京seo网络优化招聘网
  • 山东省潍坊疫情最新消息广州seo优化排名推广