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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。