【发布时间】:2022-01-28 00:21:38
【问题描述】:
我正在将旧的 jHipster 网关更新到 7.5.0 版本。新版本使用 Spring Cloud Gateway(带有 Eureka),而旧版本使用 Zuul。在以前的版本中,使用名为“foo”的服务和路径“bar”的服务发现将在网关上注册它而没有任何前缀,因此可以通过以下方式访问它:
GATEWAY_URL/foo/bar
现在所有服务都使用“services/”前缀注册,结果需要调用以下网址:
GATEWAY_URL/services/foo/bar
我找不到对此负责的配置。我找到了一个属性 spring.webservices.path,但是将其更改为其他值不会产生任何更改,并且在 Spring Boot 2.6.3 中它的值不能为空或“/”(但我不确定这是否是我应该的属性检查)。我还尝试了 spring.cloud.gateway.routes 形式:
spring:
webservices:
path: /test
main:
allow-bean-definition-overriding: true
cloud:
gateway:
discovery:
locator:
enabled: true
routes:
- id: user-service-route
uri: lb://user
predicates:
- Path=/user/**
但没有任何运气。我也不确定这是 jHipster 问题还是 SCG
我需要更改它,以便使用我的 API 的其他系统不需要更新它们的路径,我知道我之前总是可以添加 nginx 以便它会重写路径但感觉不正确。
【问题讨论】:
-
据我所知,在迁移到 Spring Cloud Gateway 之前,此更改也在 JHipster Zuul 中完成。
-
这可能是真的,我使用的是非常旧的版本 - 从文件中我看到它是使用 4.6.2 生成器生成的,所以肯定发生了很多变化,但这意味着它可能是jHipster负责
-
我不这么认为,我个人会尝试在 DiscoveryClientRouteDefinitionLocator 类中带有断点的调试器下运行
-
是的,这正是我所做的,我发现这是由作为 SCG 的一部分的 GatewayDiscoveryClientAutoConfiguration 完成的自动配置的情况。它使用默认谓词定义 DiscoveryLocatorProperties bean: PredicateDefinition{name='Path', args={pattern='/'+serviceId+'/**'}} 所以最后我创建了自定义 WebFilter ,它将我的旧服务路径映射到新的随着时间的推移,我将更新客户端以使用新的路由路径:)
标签: jhipster netflix-eureka spring-cloud-gateway jhipster-gateway