From 0ab550123ff0acf86cc725c6a1118f79e0ff5a5e Mon Sep 17 00:00:00 2001 From: chenbowen Date: Thu, 27 Nov 2025 10:27:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B3=E9=97=AD=20databus=20web=20=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E8=BF=9E=E6=8E=A5=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/GatewayWebClientConfiguration.java | 32 +++++++++++++------ .../src/main/resources/application.yml | 5 +++ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/config/GatewayWebClientConfiguration.java b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/config/GatewayWebClientConfiguration.java index 67bfe6ef..24811a53 100644 --- a/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/config/GatewayWebClientConfiguration.java +++ b/zt-module-databus/zt-module-databus-server/src/main/java/com/zt/plat/module/databus/framework/integration/gateway/config/GatewayWebClientConfiguration.java @@ -1,5 +1,7 @@ package com.zt.plat.module.databus.framework.integration.gateway.config; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.reactive.function.client.WebClientCustomizer; import org.springframework.context.annotation.Bean; @@ -17,33 +19,43 @@ public class GatewayWebClientConfiguration { private final int maxInMemorySize; private final long maxIdleTimeMillis; private final long evictInBackgroundMillis; + private final boolean connectionPoolEnabled; private final ReactorClientHttpConnector httpConnector; + private static final Logger log = LoggerFactory.getLogger(GatewayWebClientConfiguration.class); public GatewayWebClientConfiguration( @Value("${databus.gateway.web-client.max-in-memory-size:20971520}") int maxInMemorySize, @Value("${databus.gateway.web-client.max-idle-time:45000}") long maxIdleTimeMillis, - @Value("${databus.gateway.web-client.evict-in-background-interval:20000}") long evictInBackgroundMillis) { + @Value("${databus.gateway.web-client.evict-in-background-interval:20000}") long evictInBackgroundMillis, + @Value("${databus.gateway.web-client.connection-pool-enabled:true}") boolean connectionPoolEnabled) { this.maxInMemorySize = maxInMemorySize; - this.maxIdleTimeMillis = maxIdleTimeMillis > 0 ? maxIdleTimeMillis : 45000L; - this.evictInBackgroundMillis = Math.max(evictInBackgroundMillis, 0L); + this.maxIdleTimeMillis = maxIdleTimeMillis; + this.evictInBackgroundMillis = evictInBackgroundMillis; + this.connectionPoolEnabled = connectionPoolEnabled; this.httpConnector = buildConnector(); } @Bean public WebClientCustomizer gatewayWebClientCustomizer() { + // 统一设置 WebClient 连接器与内存限制,避免各处重复配置 return builder -> builder .clientConnector(httpConnector) .codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(maxInMemorySize)); } private ReactorClientHttpConnector buildConnector() { - ConnectionProvider.Builder providerBuilder = ConnectionProvider.builder("databus-gateway") - .maxIdleTime(Duration.ofMillis(maxIdleTimeMillis)); - if (evictInBackgroundMillis > 0) { - providerBuilder.evictInBackground(Duration.ofMillis(evictInBackgroundMillis)); + if (connectionPoolEnabled) { + // 启用连接池,基于配置设置空闲回收参数 + ConnectionProvider provider = ConnectionProvider.builder("databus-gateway") + .maxIdleTime(Duration.ofMillis(maxIdleTimeMillis)) + .evictInBackground(Duration.ofMillis(evictInBackgroundMillis)) + .build(); + log.info("Databus gateway WebClient 已启用连接池 (maxIdleTime={}ms, evictInterval={}ms)", + maxIdleTimeMillis, evictInBackgroundMillis); + return new ReactorClientHttpConnector(HttpClient.create(provider).compress(true)); } - ConnectionProvider provider = providerBuilder.build(); - HttpClient httpClient = HttpClient.create(provider).compress(true); - return new ReactorClientHttpConnector(httpClient); + // 关闭连接池,每次请求都会重新建立 TCP 连接 + log.info("Databus gateway WebClient 已禁用连接池,所有请求将使用全新连接"); + return new ReactorClientHttpConnector(HttpClient.create().compress(true)); } } diff --git a/zt-module-databus/zt-module-databus-server/src/main/resources/application.yml b/zt-module-databus/zt-module-databus-server/src/main/resources/application.yml index d355c7a9..c40ecc83 100644 --- a/zt-module-databus/zt-module-databus-server/src/main/resources/application.yml +++ b/zt-module-databus/zt-module-databus-server/src/main/resources/application.yml @@ -131,4 +131,9 @@ zt: ignore-tables: - databus_api_client_credential +databus: + gateway: + web-client: + connection-pool-enabled: false # 默认开启连接池,排查长连接问题时可临时关闭 + debug: false