Spring Cloud Feign性能优化代码实例

网友投稿 342 2022-12-13


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请求阻塞操作oziRT, 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

第三步,配置 HTTPClient Bean

import java.util.Timer;

import java.util.TimerTask;

import java.util.concurrent.TimeUnit;

import org.apache.http.client.HttpClient;

import org.apache.http.client.config.RequestConfig;

import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;

import org.apache.http.impl.client.HttpClientBuilder;

import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class HttpPool {

@Bean

public HttpClient httpClient(){

System.out.println("===== Apache httpclient 初始化连接池开始===" );

// 生成默认请求配置

RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();

// 超时时间

requestConfigBuilder.setSocketTimeout(5 * 1000);

// 连接时间

requestConfigBuilder.setConnectTimeout(5 * 1000);

RequestConfig defaultRequestConfig = requestConfigBuilder.build();

// 连接池配置

// 长连接保持30秒

final PoolingHttpClientConnectionManager pollingConnectionManager = new PoolingHttpClientConnectionManager(30, TimeUnit.MILLISECONDS);

// 总连接数

pollingConnectionManager.setMaxTotal(1000);

// 同路由的并发数

pollingConnectionManager.setDefaultMaxPerRoute(100);

// httpclient 配置

HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

// 保持长连接配置,需要在头添加Keep-Alive

httpClientBuilder.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy());

httpClientBuilder.setConnectionManager(pollingConnectionManager);

httpClientBuilder.setDefaultRequestConfig(defaultRequestConfig);

HttpClient client = httpClientBuilder.build();

// 启动定时器,定时回收过期的连接

Timer timer = new Timer();

timer.schedule(new TimerTask() {

@Override

public void run() {

System.out.println("=====closeIdleConnections===");

pollingConnectionManager.clooziRTseExpiredConnections();

pollingConnectionManager.closeIdleConnections(5, TimeUnit.SECONDS);

}

}, 10 * 1000, 5 * 1000);

System.out.println("===== Apache httpclient 初始化连接池完毕===");

return client;

}

}

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Cloud Feign组成配置过程解析
下一篇:Spring Cloud Stream分区分组原理图解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~