1、替换 tomcat
首先,把 tomcat 换成 undertow,这个性能在 Jmeter 的压测下,undertow 比 tomcat 高一倍
第一步,pom 修改去除tomcat
org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-tomcatorg.springframework.bootspring-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.openfeignfeign-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.closeExpiredConnections();
pollingConnectionManager.closeIdleConnections(5, TimeUnit.SECONDS);
}
}, 10 * 1000, 5 * 1000);
System.out.println("===== Apache httpclient 初始化连接池完毕===");
return client;
}
}
3、配置 Hystrix
第一步,依赖
org.springframework.cloudspring-cloud-starter-hystrix
第二步,配置
# 配置hystrix的参数
hystrix:
threadpool:
# default: 默认参数,作用的所有的hystrix的客户端,如果需要对某个具体的接口,可以写接口+方法名称
default:
coreSize: 500
command:
default:
fallback:
# 是否开启回退方法
enabled: true
execution:
isolation:
thread:
timeoutInMilliseconds: 30000 #缺省为1000
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Linux
+关注
关注
87文章
11030浏览量
207240 -
JAVA
+关注
关注
19文章
2916浏览量
103350 -
数据库
+关注
关注
7文章
3639浏览量
63736 -
python
+关注
关注
53文章
4701浏览量
83699 -
性能优化
+关注
关注
0文章
17浏览量
7412
发布评论请先 登录
相关推荐
如何用ACM简化你的Spring Cloud微服务环境配置管理
摘要: 本文我们就如何使用阿里云ACM这样的配置管理产品在Spring Cloud中替代Spring Cloud Config帮助简化环境配置管理做一个简单的示例,帮助你理解基于ACM
发表于 02-02 14:18
EDAS再升级!全面支持Spring Cloud应用
。服务器的不断增加对于运维人员也是一个极大的挑战。开发、测试、线上环境差异性,交付流程越来越复杂,新应用上线不仅效率低,而且风险高。为了优化Spring Cloud微服务体验,就必须补充一个应用程序平台
发表于 02-02 15:20
使用阿里云ACM简化你的Spring Cloud微服务环境配置管理
摘要: 本文我们就如何使用阿里云ACM这样的配置管理产品在Spring Cloud中替代Spring Cloud Config帮助简化环境配置管理做一个简单的示例,帮助你理解基于ACM
发表于 07-04 17:16
Dubbo Cloud Native 之路的实践与思考
CNCF 架构体系Spring Cloud 架构体系Dubbo 架构体系Dubbo Cloud Native 准备Dubbo 注解驱动(Annotation-Driven
发表于 07-05 16:05
Spring Cloud Function基于Spring Boot的函数计算框架
./oschina_soft/spring-cloud-function.zip
发表于 05-13 10:16
•0次下载
RabbitRpc基于spring cloud的微服务rpc调用
./oschina_soft/gitee-spring-cloud-rabbitrpc.zip
发表于 06-14 09:51
•1次下载
Spring Cloud Gateway服务网关的部署与使用详细教程
一、为什么需要服务网关: 1、什么是服务网关: 2、服务网关的基本功能: 3、流量网关与服务网关的区别: 二、服务网关的部署: 1、主流网关的对比与选型: 2、Spring Cloud
如何解决Spring Cloud下测试环境路由问题
Spring Cloud Tencent 微服务开发框架自六月底正式对外宣发后,受到了许多开发者非常火热的关注。不到一个月时间, Github Star 数就已突破 2000,超过 1000
Spring Cloud Tencent发布最新匹配版本!
无论北极星还是 Spring Cloud Tencent 当前都在积极的修复 Bug、完善用户体验、迭代新功能。所以 Spring Cloud Tencent 也第一时间适配了
Spring Cloud 2022.0.0正式发布
由于 Spring 现在提供了他们自己实现的接口 HTTP 客户端解决方案,因此从 2022.0.0 开始,Spring Cloud OpenFeign 已到达特性完成状态。这意味着 Spri
Spring Cloud :打造可扩展的微服务网关
Spring Cloud Gateway是一个基于Spring Framework 5和Project Reactor的反应式编程模型的微服务网关。它提供了丰富的功能,包括动态路由、请求限流、集成安全性等,使其成为构建微服务架构
spring分布式框架有哪些
Spring分布式框架是一套基于Spring框架的解决方案,用于构建分布式系统。它提供了一系列的组件和模块,可以帮助开发人员轻松地构建可扩展、高可用、高性能的分布式应用程序。下面将详细介绍一些常用
dubbo和spring cloud区别
Dubbo和Spring Cloud是两个非常流行的微服务框架,各有自己的特点和优势。在本文中,我们将详细介绍Dubbo和Spring Cloud的区别。 1.架构设计: Dubbo是
评论