修改服务转发方式

This commit is contained in:
2025-07-07 01:37:56 +08:00
parent f9485d2011
commit 20630c5283
6 changed files with 60 additions and 58 deletions

View File

@ -1,4 +1,4 @@
FROM openjdk:17-jdk FROM openjdk:8-jdk
COPY target/*.jar app.jar COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", \ ENTRYPOINT ["java", "-jar", \

31
pom.xml
View File

@ -13,17 +13,17 @@
<description>统一 API 网关服务</description> <description>统一 API 网关服务</description>
<properties> <properties>
<java.version>17</java.version> <java.version>1.8</java.version>
<spring-boot.version>2.6.12</spring-boot.version> <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
<spring-cloud.version>2021.0.5</spring-cloud.version> <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version> <spring-cloud-alibaba.version>2.2.9.RELEASE</spring-cloud-alibaba.version>
</properties> </properties>
<!-- Parent --> <!-- Parent -->
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.12</version> <version>2.3.12.RELEASE</version>
<relativePath/> <relativePath/>
</parent> </parent>
@ -70,27 +70,6 @@
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> </dependency>
<!-- LoadBalancer 支持 lb:// 协议 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- Actuator 监控 --> <!-- Actuator 监控 -->
<dependency> <dependency>

View File

@ -0,0 +1,40 @@
package com.sczx.gateway.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.net.URI;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@Configuration
public class CustomRouteConfig {
@Autowired
private DiscoveryClient discoveryClient;
private final AtomicInteger index = new AtomicInteger(0);
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("sczx_user", r -> r.path("/zc/user/**")
.filters(f -> f.rewritePath("/zc/user/(?<segment>.*)", "/${segment}"))
.uri(uriWithCustomLoadBalance("sczx_user")))
.build();
}
private URI uriWithCustomLoadBalance(String serviceName) {
List<ServiceInstance> instances = discoveryClient.getInstances(serviceName);
if (instances == null || instances.isEmpty()) {
throw new RuntimeException("No available instances for service: " + serviceName);
}
ServiceInstance selected = instances.get(Math.abs(index.getAndIncrement()) % instances.size());
return URI.create("http://" + selected.getHost() + ":" + selected.getPort());
}
}

View File

@ -1,7 +0,0 @@
package com.sczx.gateway.config;
import org.springframework.context.annotation.Configuration;
@Configuration
public class LoadBalancerConfig {
}

View File

@ -5,7 +5,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -17,10 +16,6 @@ public class TestController {
@Autowired @Autowired
private DiscoveryClient discoveryClient; private DiscoveryClient discoveryClient;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/test") @GetMapping("/test")
public String test() { public String test() {
List<ServiceInstance> instances = discoveryClient.getInstances("sczx_user"); List<ServiceInstance> instances = discoveryClient.getInstances("sczx_user");
@ -28,11 +23,6 @@ public class TestController {
return "No instances found!"; return "No instances found!";
} }
ServiceInstance instance = loadBalancerClient.choose("sczx_user"); return "Chosen instance: " + instances.get(0).getUri();
if (instance == null) {
return "No instance chosen!";
}
log.info("Chosen instance: {}", instance.getUri());
return "Chosen instance: " + instance.getUri();
} }
} }

View File

@ -6,19 +6,19 @@ spring:
application: application:
name: sczx_gateway name: sczx_gateway
cloud: cloud:
gateway: # gateway:
discovery: # discovery:
locator: # locator:
enabled: true # 开启从注册中心动态获取路由 # enabled: true # 开启从注册中心动态获取路由
lower-case-service-id: true # 服务名转小写 # lower-case-service-id: true # 服务名转小写
routes: # routes:
- id: sczx_user # - id: sczx_user
# uri: http://172.18.0.4:8081 ## uri: http://172.18.0.4:8081
uri: lb://sczx_user # uri: lb://sczx_user
predicates: # predicates:
- Path=/zc/user/** # - Path=/zc/user/**
filters: # filters:
- StripPrefix=2 # - StripPrefix=2
nacos: nacos:
discovery: discovery:
server-addr: 115.190.8.52:8848 # Nacos 地址 server-addr: 115.190.8.52:8848 # Nacos 地址