我正在将zuul网关迁移到SCG。我的服务在kubernetes中运行并通过consul注册。典型的服务名称是xxx-service。因此,使用当前网关配置,我可以通过http://address/api/xxx-service/some-path调用它们
我的当前配置:
spring:
cloud:
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
predicates:
- name: Path
args:
pattern: "'/api/' + serviceId + '/**'"
filters:
- name: RewritePath
args:
regexp: "'/api/' + serviceId + '/(?<remaining>.*)'"
replacement: "'/${remaining}'"
但是客户端调用它们时服务名中不应该有“-service”后缀。如何配置SCG以使其能够通过http://address/api/xxx-service/some-path调用服务
先前配置:
zuul.routes.xxx.service-id=xxx-service
zuul.routes.aaa-bbb.service-id=aaa-bbb-service
zuul.routes.aaa-bbb.path=/aaa/bbb/**
zuul.strip-prefix=true
zuul.prefix=/api
3条答案
按热度按时间hlswsv351#
我的位置完全相同。你找到解决这个问题的诀窍了吗?我知道我们可以在RouteLocator中定义所有路线,如下所示:
我不确定,但也许你需要禁用发现定位器才能正确地做到这一点。
但如果能找到一种不那么脏的解决方案就太好了。
wztqucjr2#
除了@Rémi Gélibert变体之外,我们还可以实现自己的RouteLocator。它允许您为您的路线选择指定 predicate ,以及能够根据您的意愿修改请求的特殊过滤器。
这样,我们就可以将路由配置提取到某种
application.properties
。请注意:
我的网关依赖于kubernetes服务发现,因此我将
uri
改写为uri("http://" + serviceName)
如果你有领事馆/欧洲发现集成,你可以尝试这样做的其他方式:
uri("lb://" + serviceName)
ppcbkaq53#
您可以进行以下配置以满足您的需要:
官方文件:https://cloud.spring.io/spring-cloud-gateway/reference/html/#configuring-predicates-and-filters-for-discoveryclient-routes