说明:SpringCloud系列笔者自学系列,学习来源是周立的博客 http://www.itmuch.com/ 。而此处转载其博客只是为了方便自己以后的学习。
本篇来源 http://www.itmuch.com/spring-cloud/finchley-17/
上一节( 跟我学Spring Cloud(Finchley版)-16-Zuul )中,已经实现用Zuul转发到Eureka上的微服务。默认的路由规则是:访问$ZUUL_URL/指定为服务/**
会被转发到指定微服务
的/**
。
但在实际项目中,往往需要自己定义路由规则,Zuul的路由配置非常灵活、简单,本节详细讲解Zuul的路由配置。
一、自定义指定微服务的访问路径
配置zuul.routes.指定微服务的serviceId = 指定路径
即可。例如:
zuul: routes: microservice-provider-user: /user/** |
这样设置,microservice-provider-user微服务就会被映射到/user/**路径。
二、忽略指定微服务
忽略服务非常简单,可以使用zuul.ignored-services
配置需要忽略的服务,多个用逗号分隔。例如:
zuul: ignored-services: microservice-provider-user,microservice-consumer-movie |
这样就可让Zuul忽略microservice-provider-user和microservice-consumer-movie微服务,只代理其他微服务。
三、忽略所有微服务,只路由指定的微服务
很多场景下,我们可能只想要让Zuul代理指定的微服务,此时可以将zuul.ignored-services
设为’*’
zuul: ignored-services: '*' # 使用'*'可忽略所有微服务 routes: microservice-provider-user: /user/** |
这样就可以让Zuul只路由microservice-provider-user微服务。
四、同时指定微服务的serviceId和对应路径
例如:
zuul: routes: user-route: # 该配置方式中,user-route只是给路由一个名称,可以任意起名。 service-id: microservice-provider-user path: /user/** # service-id对应的路径 |
本例配置的效果同示例(1)。
五、同时指定path和URL,例如:
zuul: routes: user-route: # 该配置方式中,user-route只是给路由一个名称,可以任意起名。 url: http://localhost:8000/ # 指定的url path: /user/** # url对应的路径。 |
这样就可以将/user/**
映射到http://localhost:8000/**
。
需要注意的是,使用这种方式配置的路由不会作为HystrixCommand执行,同时也不能使用Ribbon来负载均衡多个URL。例(6)可解决该问题。
六、同时指定path和URL,并且不破坏Zuul的Hystrix、Ribbon特性。
zuul: routes: user-route: path: /user/** service-id: microservice-provider-user ribbon: eureka: enabled: false microservice-provider-user: ribbon: listOfServers: localhost:8000,localhost:8001 |
这样就可以既指定path与URL,又不破坏Zuul的Hystrix与Ribbon特性了。
七、使用正则表达式指定Zuul的路由匹配规则
借助PatternServiceRouteMapper,实现从微服务到映射路由的正则配置。例如:
public PatternServiceRouteMapper serviceRouteMapper() { // 调用构造函数PatternServiceRouteMapper(String servicePattern, String routePattern) // servicePattern指定微服务的正则 // routePattern指定路由正则 return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>v.+$)", "${version}/${name}"); } |
通过这段代码即可实现将诸如microservice-provider-user-v1这个微服务,映射到/v1/microservice-provider-user/**这个路径。
八、路由前缀
示例1:
zuul: prefix: /api strip-prefix: false routes: microservice-provider-user: /user/** |
这样,访问Zuul的/api/microservice-provider-user/1路径,请求将会被转发到microservice-provider-user的/api/1
示例2:
zuul: routes: microservice-provider-user: path: /user/** strip-prefix: false |
这样访问Zuul的/user/1路径,请求将会被转发到microservice-provider-user的/user/1
TIPS:
① 可参考该Issue辅助理解: https://github.com/spring-cloud/spring-cloud-netflix/issues/1365
九、忽略某些路径
上文我们讲解了如何忽略微服务,但有时我们还需要更细粒度的路由控制。例如,我们想让Zuul代理某个微服务,同时又想保护该微服务的某些敏感路径。此时,可使用ignoredPatterns,指定忽略的正则。例如:
zuul: ignoredPatterns: /**/admin/** # 忽略所有包含/admin/的路径 routes: microservice-provider-user: /user/** |
这样就可将microservice-provider-user微服务映射到/user/**路径,但会忽略该微服务中所有包含/admin/的路径。
小技巧
读者如无法掌握Zuul路由的规律,可将com.netflix包的日志级别设为DEBUG。这样,Zuul就会打印转发的具体细节,从而帮助我们更好地理解Zuul的路由配置,例如:
logging: level: com.netflix: DEBUG |
相关文章
- 跟我学Spring Cloud(Finchley版)-16-Zuul
- Spring Cloud内置的Zuul过滤器详解
- Spring Cloud Edgware新特性之五:filters端点
- 纠错帖:Zuul & Spring Cloud Gateway & Linkerd性能对比
- Zuul的高可用
相关推荐
可用的spring-cloud-starter-netflix-zuul-2.0.0.RELEASE包,maven上的spring-cloud-starter-netflix-zuul-2.0.0.RELEASE已经没了。
spring-cloud-netflix-zuul-websocket, Zuul反向代理网络套接字支持 spring-cloud-netflix-zuul-websocketspring 应用程序中支持Zuul反向代理web套接字支持的简单库。用法spring-cloud-netflix-zuul-websocket可以从...
《Spring Cloud Netflix Zuul:一个已经闭源的API网关组件》 在现代微服务架构中,API网关起着至关重要的角色,它作为一个统一的入口,负责路由、安全、监控等多种职责。Spring Cloud Netflix Zuul就是这样一款组件...
标题 "springcloud2-hystrix-feign-zuul.zip" 提示了我们这是一组关于Spring Cloud 2的实现,具体涉及Hystrix、Feign和Zuul组件的实践项目。Spring Cloud 是一个用于构建分布式系统的服务发现、配置管理和微服务连接...
在Spring Cloud框架中,"springcloud-ribbon-feign-hystrix-zuul-config"这个标题涉及到四个关键组件:Ribbon、Feign、Hystrix和Zuul,以及配置管理Config。这些组件都是构建分布式系统时常用的服务发现、客户端负载...
├──cloud-zuul-server────────────────第一代服务网关(Zuul)[8080] ├──cloud-gateway-server─────────────第二代服务网关(Gateway)[8080] ├──cloud-modules-app──────...
spring-cloud-config-eureka-bus:配置中心和消息总线示例(配置中心终结版) gateway-service-zuul:Spring Cloud Zuul使用初级篇 网关 均衡负载 spring-cloud-zuul:Spring Cloud Zuul使用高级篇 Filter 鉴权 熔断...
SpringCloud-2.0-service-zuul-80 代表了Zuul服务网关,它是所有微服务请求的统一入口。Zuul的主要职责有: 1. 路由转发:根据请求路径将请求转发到对应的服务提供者,实现服务间的解耦。 2. 访问过滤:Zuul提供了...
spring-cloud-starter-netflix-zuul-2.1.0.RELEASE
SpringCloud是中国Java开发者中最受欢迎的微服务框架之一,它提供了构建分布式系统所需的众多工具和服务,如服务发现、负载均衡、断路器、API网关、配置中心等。本压缩包"springcloud-learning-master.zip"是一个...
.`SpringCloud系列研究-服务网关zuul.pdf
.`SpringCloud系列研究-服务网关zuul.docx
《深入理解Spring Cloud Netflix Hystrix:构建弹性微服务...在实际项目中,结合Spring Cloud其他组件,如Eureka(服务发现)、Zuul(API网关)等,可以构建出更为完善的微服务体系,提升整体系统的稳定性和可维护性。
《Spring Cloud实战详解:基于spring-cloud-examples-master的深度解析》 在当今的软件开发领域,微服务架构已经成为主流趋势,而Spring Cloud作为Java生态中的微服务治理框架,深受开发者们的喜爱。本篇文章将深入...
spring-cloud-netflix-zuul-2.1.0.RELEASE
在"spring-cloud-demo-master"中,Zuul作为前端请求的入口,进行路由转发,可以实现动态路由、过滤器等功能。它简化了客户端调用多个微服务的复杂性,同时提供了统一的安全控制,如身份验证、速率限制等。 三、JPA...
SpringCloud Zuul是Spring Cloud生态系统中的一个边缘服务和API网关组件。它的主要功能是作为微服务架构中的统一入口,负责路由转发、过滤器处理、负载均衡以及安全控制等任务。Zuul允许开发者在微服务架构中实现...
Spring Boot 提供了一种快速构建独立的、生产级别的基于Spring的应用程序的方式,而Spring Cloud则为开发分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、...
Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具集,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)...
spring-cloud-config-eureka-bus:配置中心和消息总线示例(配置中心终结版) gateway-service-zuul:Spring Cloud Zuul使用初级篇 网关 均衡负载 spring-cloud-zuul:Spring Cloud Zuul使用高级篇 Filter 鉴权 熔断...