fix 修复 gateway sse 连接占用连接池导致响应拒绝问题
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
package org.dromara.gateway.config;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.hc.core5.util.TimeValue;
|
||||
import org.apache.hc.core5.util.Timeout;
|
||||
import org.dromara.gateway.config.properties.GatewayHttpClientProperties;
|
||||
import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder;
|
||||
import org.springframework.boot.http.client.HttpClientSettings;
|
||||
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.client.ClientHttpRequestFactory;
|
||||
|
||||
/**
|
||||
* 网关 HttpClient5 配置
|
||||
*
|
||||
* @author RuoYi
|
||||
*/
|
||||
@Configuration
|
||||
@RequiredArgsConstructor
|
||||
public class GatewayHttpClientConfig {
|
||||
|
||||
private final GatewayHttpClientProperties properties;
|
||||
|
||||
/**
|
||||
* Gateway MVC 使用 RestClient 转发请求,此处提供 HttpClient5 请求工厂以调整连接池参数
|
||||
*/
|
||||
@Bean
|
||||
@RefreshScope
|
||||
public ClientHttpRequestFactory gatewayClientHttpRequestFactory(HttpClientSettings settings) {
|
||||
return ClientHttpRequestFactoryBuilder.httpComponents()
|
||||
.withConnectionManagerCustomizer(connectionManager -> {
|
||||
connectionManager.setMaxConnTotal(properties.getMaxConnTotal());
|
||||
connectionManager.setMaxConnPerRoute(properties.getMaxConnPerRoute());
|
||||
})
|
||||
.withConnectionConfigCustomizer(connectionConfig -> {
|
||||
if (properties.getConnectionTimeToLive() != null) {
|
||||
connectionConfig.setTimeToLive(TimeValue.of(properties.getConnectionTimeToLive()));
|
||||
}
|
||||
if (properties.getValidateAfterInactivity() != null) {
|
||||
connectionConfig.setValidateAfterInactivity(TimeValue.of(properties.getValidateAfterInactivity()));
|
||||
}
|
||||
})
|
||||
.withDefaultRequestConfigCustomizer(requestConfig -> {
|
||||
if (properties.getConnectionRequestTimeout() != null) {
|
||||
requestConfig.setConnectionRequestTimeout(Timeout.of(properties.getConnectionRequestTimeout()));
|
||||
}
|
||||
if (properties.getResponseTimeout() != null) {
|
||||
requestConfig.setResponseTimeout(Timeout.of(properties.getResponseTimeout()));
|
||||
}
|
||||
})
|
||||
.build(settings);
|
||||
}
|
||||
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package org.dromara.gateway.config.properties;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
/**
|
||||
* 网关 HttpClient5 配置
|
||||
*
|
||||
* @author RuoYi
|
||||
*/
|
||||
@Data
|
||||
@Configuration
|
||||
@RefreshScope
|
||||
@ConfigurationProperties(prefix = "spring.cloud.gateway.httpclient")
|
||||
public class GatewayHttpClientProperties {
|
||||
|
||||
/**
|
||||
* 连接池最大连接数
|
||||
*/
|
||||
private Integer maxConnTotal = 1000;
|
||||
|
||||
/**
|
||||
* 单个路由最大连接数
|
||||
*/
|
||||
private Integer maxConnPerRoute = 500;
|
||||
|
||||
/**
|
||||
* 从连接池获取连接的等待超时时间
|
||||
*/
|
||||
private Duration connectionRequestTimeout = Duration.ofSeconds(3);
|
||||
|
||||
/**
|
||||
* 等待下游响应数据的超时时间,SSE 场景通常不设置
|
||||
*/
|
||||
private Duration responseTimeout;
|
||||
|
||||
/**
|
||||
* 连接最大存活时间
|
||||
*/
|
||||
private Duration connectionTimeToLive;
|
||||
|
||||
/**
|
||||
* 空闲连接可用性校验间隔
|
||||
*/
|
||||
private Duration validateAfterInactivity = Duration.ofSeconds(30);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user