在上面的例子中,Consumer和Provider都通过Zuul默认进行了路由,但服务路由会有一些限制,例如不希望某些服务被开放出去,或者希望对服务路由时的路径进行手动设置。下面看几种Zuul的配置。
(1)单实例路由
Zuul不注册到Eureka上,仅添加Zuul依赖,对请求来的路径进行服务分发。
上面的代码填写在yml文件中,其中zuul.routes标签下用于配置不同路径的路由规则,consumer标签表示路由配置段,每段都有自己的名字;path表示路径;url表示转发到的服务地址;strip-prefix比较特殊,表示在转发时不去掉前缀(本例中如果不把它置为false,那么consumer服务收到的请求路径则会缺失/consumer,而仅剩后面的路径)。这段配置的目的就是把请求路径为/consumer/**的请求转发到http://localhost:18020/服务上。
请求路径中通配符的规则见表9-1。
表9-1 通配符规则
(2)根据服务名路由
一般情况下,集群内的某一服务不会仅仅布置一个实例,那么在多实例的情况下,使用服务名进行自带负载的路由策略是个明智的选择。根据服务名路由只要配置Eureka并且针对每一个服务在配置文件中设置映射关系。
在配置路由规则时,和设置IP路由区别不大,仅把url配置改为正确的service-id即可完成根据服务名路由。例如通过Zuul访问Provider服务,可以在Provider多台实例的日志中看到轮询的日志打印。
(3)前缀的用处
如前面所讲,Zuul请求的前面是反向代理和负载,那么在反向代理中识别请求路径时,如果只有这一个服务集群需要映射,那么肯定是能正确分发到Zuul服务的;如果反向代理负责映射多个服务集群,而多个服务集群中难免会有某些服务的请求路径是相同的,这种情况就需要给同一集群内的服务分配一个统一的前缀。(www.xing528.com)
上面代码中,对此Zuul服务通过prefix属性添加一个统一的前缀/springcloud,并且在进行具体服务映射之前删掉此前缀。从而在反向代理中通过识别此前缀,即可映射相应集群,实现通过请求路径标明集群的目的。如图9-24所示。
图9-24 自定义的路由请求
(4)隐藏服务端口
Zuul会自动为集群内的服务提供负载,供外网访问,但有时不希望某些服务的接口暴露给外网,所以可以通过ignored-services配置来设置某些服务不需要Zuul提供负载。
配置中去掉了Provider服务配置的映射规则,并且在Zuul的ignored-services配置项中添加Provider服务的ServiceId,这样Zuul就不会把Provider服务的接口暴露出去。使用Postman无法通过Zuul访问Provider[52]服务的接口,如图9-25所示。
图9-25 服务屏蔽后的访问情况
(5)其他配置
Zuul标签下还有一些其他配置,例如host中包含连接数和超时时间等配置;ignored-*标签可以对不同类型数据进行过滤等,这些配置的使用要在实际项目中根据具体需要进行选择。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。