我有一组微服务,称为"client-Foo",其中Foo是某个特定第三方客户端的名称。
按原样使用这些名称会创建一些非常丑陋的端点 url,因此我想将它们转换为更好的分层形式。
我添加了一个自定义PatternServiceRouteMapper
,该将 serviceIdclient-Foo
转换为 urlclient/Foo
。
这给出了我想要的 url,但也破坏了服务映射,因为它也会将注册的 serviceId 更改为client/Foo
;因此,当 Zuul 转到路由时,它会失败,因为没有client/Foo
服务,它的id 是client-Foo
!
我无法对任何路径进行硬编码,因为应用程序需要任意数量的不同"client-*"服务。
通过查看 ZuulProxyAutoConfiguration,您可以看到您可以替换一些 bean 来实现您的目标,特别是您应该考虑提供自己的RouteLocator
接口实现或扩展DiscoveryClientRouteLocator
类。 您的服务实例还可以在 Eureka 服务器中注册,并在元数据映射中使用您的RouteLocator
可以使用的其他数据。
我只需添加一个配置定义的 Zuul 路由:
zuul:
routes:
client-foo: /foo/**
此外,我建议不要在服务ID中使用破折号,因为它可能会混淆配置服务器api(在/config/foo-profile.yml中,profile是您要获取配置的弹簧配置文件(。