fix: Gateway添加Nacos服务发现依赖,修复负载均衡器配置

1. fund-gateway pom.xml 添加 spring-cloud-starter-alibaba-nacos-discovery 依赖
2. TenantLoadBalancerAutoConfig 使用 @LoadBalancerClients 注解配置
3. TenantAwareLoadBalancer 增加 serviceId null 检查
This commit is contained in:
zhangjf 2026-02-20 18:43:38 +08:00
parent a78ccaeae5
commit 52c926dcd6
20 changed files with 56 additions and 38 deletions

View File

@ -1,4 +1,4 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. #NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Fri Feb 20 18:12:34 CST 2026 #Fri Feb 20 18:33:58 CST 2026
fund-common-0.0.1-SNAPSHOT.jar>= fund-common-0.0.1-SNAPSHOT.jar>=
fund-common-0.0.1-SNAPSHOT.pom>= fund-common-0.0.1-SNAPSHOT.pom>=

View File

@ -3,7 +3,7 @@
<groupId>com.fundplatform</groupId> <groupId>com.fundplatform</groupId>
<artifactId>fund-common</artifactId> <artifactId>fund-common</artifactId>
<versioning> <versioning>
<lastUpdated>20260220101230</lastUpdated> <lastUpdated>20260220103348</lastUpdated>
<snapshot> <snapshot>
<localCopy>true</localCopy> <localCopy>true</localCopy>
</snapshot> </snapshot>
@ -11,12 +11,12 @@
<snapshotVersion> <snapshotVersion>
<extension>pom</extension> <extension>pom</extension>
<value>0.0.1-SNAPSHOT</value> <value>0.0.1-SNAPSHOT</value>
<updated>20260220101230</updated> <updated>20260220103348</updated>
</snapshotVersion> </snapshotVersion>
<snapshotVersion> <snapshotVersion>
<extension>jar</extension> <extension>jar</extension>
<value>0.0.1-SNAPSHOT</value> <value>0.0.1-SNAPSHOT</value>
<updated>20260220101230</updated> <updated>20260220103348</updated>
</snapshotVersion> </snapshotVersion>
</snapshotVersions> </snapshotVersions>
</versioning> </versioning>

View File

@ -6,6 +6,6 @@
<versions> <versions>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
</versions> </versions>
<lastUpdated>20260220101230</lastUpdated> <lastUpdated>20260220103348</lastUpdated>
</versioning> </versioning>
</metadata> </metadata>

View File

@ -1,3 +1,3 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice. #NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Fri Feb 20 18:12:31 CST 2026 #Fri Feb 20 18:33:50 CST 2026
fundplatform-0.0.1-SNAPSHOT.pom>= fundplatform-0.0.1-SNAPSHOT.pom>=

View File

@ -3,7 +3,7 @@
<groupId>com.fundplatform</groupId> <groupId>com.fundplatform</groupId>
<artifactId>fundplatform</artifactId> <artifactId>fundplatform</artifactId>
<versioning> <versioning>
<lastUpdated>20260220101230</lastUpdated> <lastUpdated>20260220103348</lastUpdated>
<snapshot> <snapshot>
<localCopy>true</localCopy> <localCopy>true</localCopy>
</snapshot> </snapshot>
@ -11,7 +11,7 @@
<snapshotVersion> <snapshotVersion>
<extension>pom</extension> <extension>pom</extension>
<value>0.0.1-SNAPSHOT</value> <value>0.0.1-SNAPSHOT</value>
<updated>20260220101230</updated> <updated>20260220103348</updated>
</snapshotVersion> </snapshotVersion>
</snapshotVersions> </snapshotVersions>
</versioning> </versioning>

View File

@ -6,6 +6,6 @@
<versions> <versions>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
</versions> </versions>
<lastUpdated>20260220101230</lastUpdated> <lastUpdated>20260220103348</lastUpdated>
</versioning> </versioning>
</metadata> </metadata>

View File

@ -1,2 +1,2 @@
#Fri Feb 20 11:21:39 CST 2026 #Fri Feb 20 18:40:08 CST 2026
central|https\://repo1.maven.org/maven2|null=1771557699084 central|https\://repo1.maven.org/maven2|null=1771584008125

View File

@ -1,2 +1,2 @@
#Fri Feb 20 11:21:39 CST 2026 #Fri Feb 20 18:40:08 CST 2026
central|https\://repo1.maven.org/maven2|null=1771557699091 central|https\://repo1.maven.org/maven2|null=1771584008166

View File

@ -1,2 +1,2 @@
#Fri Feb 20 11:21:39 CST 2026 #Fri Feb 20 18:40:08 CST 2026
central|https\://repo1.maven.org/maven2|null=1771557699097 central|https\://repo1.maven.org/maven2|null=1771584008178

View File

@ -1,2 +1,2 @@
#Fri Feb 20 11:21:39 CST 2026 #Fri Feb 20 18:40:08 CST 2026
central|https\://repo1.maven.org/maven2|null=1771557699096 central|https\://repo1.maven.org/maven2|null=1771584008176

View File

@ -1,2 +1,2 @@
#Fri Feb 20 11:21:39 CST 2026 #Fri Feb 20 18:40:08 CST 2026
central|https\://repo1.maven.org/maven2|null=1771557699093 central|https\://repo1.maven.org/maven2|null=1771584008171

View File

@ -1,2 +1,2 @@
#Fri Feb 20 11:21:39 CST 2026 #Fri Feb 20 18:40:08 CST 2026
central|https\://repo1.maven.org/maven2|null=1771557699090 central|https\://repo1.maven.org/maven2|null=1771584008165

View File

@ -1,2 +1,2 @@
#Fri Feb 20 11:21:39 CST 2026 #Fri Feb 20 18:40:08 CST 2026
central|https\://repo1.maven.org/maven2|null=1771557699098 central|https\://repo1.maven.org/maven2|null=1771584008180

View File

@ -1,2 +1,2 @@
#Fri Feb 20 11:21:39 CST 2026 #Fri Feb 20 18:40:08 CST 2026
central|https\://repo1.maven.org/maven2|null=1771557699092 central|https\://repo1.maven.org/maven2|null=1771584008169

View File

@ -1,2 +1,2 @@
#Fri Feb 20 11:21:39 CST 2026 #Fri Feb 20 18:40:08 CST 2026
central|https\://repo1.maven.org/maven2|null=1771557699094 central|https\://repo1.maven.org/maven2|null=1771584008173

View File

@ -62,6 +62,12 @@ public class TenantAwareLoadBalancer implements ReactorServiceInstanceLoadBalanc
@Override @Override
public Mono<Response<ServiceInstance>> choose(Request request) { public Mono<Response<ServiceInstance>> choose(Request request) {
// 如果 serviceId null直接返回空响应
if (serviceId == null || serviceId.isEmpty()) {
logger.warn("[TenantLB] serviceId 为空,无法进行负载均衡");
return Mono.just(new EmptyResponse());
}
// 检查是否启用租户路由 // 检查是否启用租户路由
if (routingProperties != null && !routingProperties.isEnabled()) { if (routingProperties != null && !routingProperties.isEnabled()) {
logger.debug("[TenantLB] 租户路由已禁用,使用默认路由"); logger.debug("[TenantLB] 租户路由已禁用,使用默认路由");

View File

@ -3,6 +3,7 @@ package com.fundplatform.common.loadbalancer;
import com.fundplatform.common.config.TenantRoutingProperties; import com.fundplatform.common.config.TenantRoutingProperties;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer; import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
@ -30,10 +31,23 @@ import org.springframework.core.env.Environment;
*/ */
@Configuration @Configuration
@ConditionalOnProperty(name = "tenant.routing.enabled", havingValue = "true", matchIfMissing = true) @ConditionalOnProperty(name = "tenant.routing.enabled", havingValue = "true", matchIfMissing = true)
@LoadBalancerClients(defaultConfiguration = TenantLoadBalancerConfig.class)
public class TenantLoadBalancerAutoConfig { public class TenantLoadBalancerAutoConfig {
@Autowired(required = false) @Autowired(required = false)
private TenantRoutingProperties routingProperties; private TenantRoutingProperties routingProperties;
}
/**
* 租户感知负载均衡器配置类
*
* <p>为每个服务创建租户感知的负载均衡器实例</p>
*/
@Configuration
class TenantLoadBalancerConfig {
@Autowired(required = false)
private TenantRoutingProperties routingProperties;
/** /**
* 注册租户感知负载均衡器 * 注册租户感知负载均衡器

View File

@ -35,6 +35,12 @@
<version>4.0.0</version> <version>4.0.0</version>
</dependency> </dependency>
<!-- Nacos Service Discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Redis for Rate Limiting & Token Storage --> <!-- Redis for Rate Limiting & Token Storage -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>

View File

@ -71,7 +71,8 @@ spring:
- id: fund-cust - id: fund-cust
uri: lb://fund-cust uri: lb://fund-cust
predicates: predicates:
- Path=/cust/** - Path=/cust/**Default Namespace
filters: filters:
- StripPrefix=1 - StripPrefix=1
@ -128,16 +129,7 @@ logging:
org.springframework.cloud.gateway: DEBUG org.springframework.cloud.gateway: DEBUG
com.fundplatform.common.loadbalancer: DEBUG com.fundplatform.common.loadbalancer: DEBUG
# 多租户路由配置Gateway 全局配置) # 多租户路由配置
tenant: tenant:
routing: routing:
enabled: true enabled: true
tenant-header: X-Tenant-Id
default-tenant-id: "1"
# 共享服务列表(不需要租户路由的服务)
shared-services:
- fund-gateway
- fund-report
- fund-file
# 默认回退策略
fallback-to-shared: true