Spring Cloud Feign性能优化代码实例
1、替换tomcat
首先,把tomcat换成undertow,这个性能在Jmeter的压测下,undertow比tomcat高一倍第一步,pom修改去除tomcat
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-undertow
第二步,配置
server: undertow: max-http-post-size:0 #设置IO线程数,它主要执行非阻塞的任务,它们会负责多个连接,默认设置每个CPU核心一个线程,数量和CPU内核数目一样即可 io-threads:4 #阻塞任务线程池,当执行类似servlet请求阻塞操作,undertow会从这个线程池中取得线程,它的值设置取决于系统的负载io-threads*8 worker-threads:32 #以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理 #每块buffer的空间大小,越小的空间被利用越充分 buffer-size:1024 #每个区分配的buffer数量,所以pool的大小是buffer-size*buffers-per-region #buffers-per-region:1024#这个参数不需要写了 #是否分配的直接内存 direct-buffers:true
2、替换HTTPClient
第一步,加依赖
io.github.openfeign feign-httpclient
第二部,在application.yml或者bootstrap.yml里面配置
#feign配置 feign: hystrix: #在feign中开启hystrix功能,默认情况下feign不开启hystrix功能 enabled:true ##配置httpclient线程池 httpclient: enabled:true okhttp: enabled:false
第三步,配置HTTPClientBean
importjava.util.Timer;
importjava.util.TimerTask;
importjava.util.concurrent.TimeUnit;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.config.RequestConfig;
importorg.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
importorg.apache.http.impl.client.HttpClientBuilder;
importorg.apache.http.impl.conn.PoolingHttpClientConnectionManager;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
@Configuration
publicclassHttpPool{
@Bean
publicHttpClienthttpClient(){
System.out.println("=====Apachehttpclient初始化连接池开始===");
//生成默认请求配置
RequestConfig.BuilderrequestConfigBuilder=RequestConfig.custom();
//超时时间
requestConfigBuilder.setSocketTimeout(5*1000);
//连接时间
requestConfigBuilder.setConnectTimeout(5*1000);
RequestConfigdefaultRequestConfig=requestConfigBuilder.build();
//连接池配置
//长连接保持30秒
finalPoolingHttpClientConnectionManagerpollingConnectionManager=newPoolingHttpClientConnectionManager(30,TimeUnit.MILLISECONDS);
//总连接数
pollingConnectionManager.setMaxTotal(1000);
//同路由的并发数
pollingConnectionManager.setDefaultMaxPerRoute(100);
//httpclient配置
HttpClientBuilderhttpClientBuilder=HttpClientBuilder.create();
//保持长连接配置,需要在头添加Keep-Alive
httpClientBuilder.setKeepAliveStrategy(newDefaultConnectionKeepAliveStrategy());
httpClientBuilder.setConnectionManager(pollingConnectionManager);
httpClientBuilder.setDefaultRequestConfig(defaultRequestConfig);
HttpClientclient=httpClientBuilder.build();
//启动定时器,定时回收过期的连接
Timertimer=newTimer();
timer.schedule(newTimerTask(){
@Override
publicvoidrun(){
System.out.println("=====closeIdleConnections===");
pollingConnectionManager.closeExpiredConnections();
pollingConnectionManager.closeIdleConnections(5,TimeUnit.SECONDS);
}
},10*1000,5*1000);
System.out.println("=====Apachehttpclient初始化连接池完毕===");
returnclient;
}
}
3、配置Hystrix
第一步,依赖
org.springframework.cloud spring-cloud-starter-hystrix
第二步,配置
#配置hystrix的参数 hystrix: threadpool: #default:默认参数,作用的所有的hystrix的客户端,如果需要对某个具体的接口,可以写接口方法名称 default: coreSize:500 command: default: fallback: #是否开启回退方法 enabled:true execution: isolation: thread: timeoutInMilliseconds:30000#缺省为1000
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。