我有一个Spring应用程序,它有以下的Gradle依赖关系:
implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-gateway'
implementation 'com.netflix.eureka:eureka-core'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.boot:spring-boot-starter-actuator'路由配置:
@Bean
public RouteLocator routes(RouteLocatorBuilder builder, LoggingGatewayFilterFactory loggingFactory) {
return builder.routes()
.route("service_route_clients_summary", r -> r.path("c")
.filters(f -> f.rewritePath("/api/management/home/clients/summary", "/management/home/clients/summary")
.filter(loggingFactory.apply(new LoggingGatewayFilterFactory.Config("My Custom Message", true, true))))
.uri("lb://merchant-hub-admin-service:8000/management/home/clients/summary"))
.build();
}我希望将/api/management/home/clients/summary转发到内部链接/management/home/clients/summary,但使用Eureka客户端查找内部服务。
当我敲响代码时,什么都没有发生--路径是找不到的。知道有什么不对吗?
发布于 2022-01-08 00:57:16
对于尤里卡的发现,你可以这样做:
spring:
application:
name: gateway
cloud:
gateway:
discovery:
locator:
lowerCaseServiceId: true
enabled: true
predicates:
- name: Path
args:
pattern: "'/api/'+serviceId.toLowerCase()+'/**'"
filters:
- name: RewritePath
args:
regexp: "'/api/' + serviceId.toLowerCase() + '/(?<remaining>.*)'"
replacement: "'/${remaining}'"当然,您需要在主类中使用@EnableDiscoveryClient。如果有兴趣的话,可以看看我的试验恢复。
在eureka中,检查/eureka/app,并查看您的服务的元数据。您将看到服务是否有上下文路径。如果没有,上述配置将有效。
如果服务确实有contextPath,则需要在replacement键中使用折叠:
replacement: "{metadata.get('contextPath') != null ? metadata.get('contextPath') : ''} + '/${remaining}'"发布于 2022-01-05 16:38:47
您可以添加筛选器表达式,这将根据您的要求修剪url。
下面的配置将使url /api/management ==> /management
spring:
cloud:
gateway:
routes:
- id: rewritepath_route
uri: https://example.org
predicates:
- Path=/api/**
filters:
- RewritePath=/api(?<segment>/?.*), /$\{segment}发布于 2022-01-03 22:43:35
很短的版本中,传递给routes().route的参数是不正确的。
你应该试试这样的方法:
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route(p -> p.path(" /api/management/home/clients/summary **")
.filters(gatewayFilterSpec -> gatewayFilterSpec
.rewritePath("/management/home/clients/summary/(?<remaining>.*)"
, "/home/clients//${remaining}"))
.uri("lb:///home/clients/summary/"))
.build();
}https://stackoverflow.com/questions/70547020
复制相似问题