springCloud(14):使用Zuul构建微服务网关-路由端点与路由配置详解

本文涉及的产品
云原生网关 MSE Higress,422元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
注册配置 MSE Nacos/ZooKeeper,118元/月
简介:

一、Zuul的路由端点

当@EnableZuulProxy与SpringBoot Actuator配合使用时,Zuul会暴露一个路由管理端点/routes。借助这个端点,可以方便、直观地查看以及管理Zuul的路由。

/routes端点的使用非常简单,使用GET方法访问该端点,即可返回Zuul当前映射的路由列表;使用POST方法访问该端点就会强制刷新Zuul当前映射的路由列表(尽管路由会自动刷新,Spring Cloud依然提供了强制立即刷新的方式)。


由于spring-cloud-starter-zuul已经包含了spring-boot-starter-actuator,因此之前编写的microservice-gateway-zuul已具备路由管理的能力。


测试:

 1、依次启动eureka-server(4010)、eureka-server-2(5010)、provide-user(4011)、hystrix-consumer-movie(5012)、microservice-gateway-zuul(5016)

 2、访问http://localhost:5016/routes,结果报401

   wKiom1mb7yqx4WhnAABaxJ8lMvI356.png

   解决:配置management.security.enabled=false

    wKioL1mb757gJcpcAABgwt7jkjQ519.png

从中可以直观地看出路径到微服务的映射。

二、路由配置详解

前面已经编写了一个简单的Zuul网关,并让该网关代理了所有注册到Eureka Server的微服务。但在现实中可能只想让Zuul代理部分微服务,又或者需要对URL进行更加精确的控制。

2.1、自定义指定微服务的访问路径

配置zuul.routes.指定微服务的serverId = 指定路径即可。例如:

1
2
3
zuul:
   routes:
     hystrix-consumer-movie: /movie/**

效果:

  wKioL1mb8f7AXmvAAABDrim09uU285.png

2.2、忽略指定微服务

使用zuul.ignored-services配置需要忽略的服务,多个用逗号分隔,例如:

1
2
zuul:
   ignored-services: provide-user

效果:

  wKioL1mb85_wsI5PAABJQdh4oqo014.png

2.3、忽略所有微服务,只路由指定微服务

将zuul.ignored-services设为'*',routes配置指定的微服务,例如:

1
2
3
4
zuul:
   ignored-services:  '*'
   routes:
     hystrix-consumer-movie: /movie/**

效果:

  wKiom1mb9H-wKCpDAAAYNgu-ZBE372.png

2.4、同时指定微服务的serviceId和对应的路径

1
2
3
4
5
zuul:
   routes:
     user-route:  # user-route只是给路由一个名称,可以随便命名
      service-id: hystrix-consumer-movie
      path: /movie/**   # service-id对应的路径

效果与2.1一样。

2.5、同时指定path和URL

1
2
3
4
5
zuul:
   routes:
     user-route:  # user-route只是给路由一个名称,可以随便命名
      url: http://localhost:5200/  #指定URL
      path: /movie/**   # URL对应的路径

说明:当访问http://localhost:5016/movie/user/1时,则会转发至http://localhost:5200/user/1

效果:

  wKiom1mb9q_Q0q0OAABCOErrr7s599.png

注意:使用这种方式配置的路由不会作为HystrixCommand执行,同时也不能使用Ribbon来负载均衡多个URL

2.6、同时指定path和URL,并且不破坏Hystrix、Ribbon特性

1
2
3
4
5
6
7
8
9
10
11
zuul:
   routes:
     user-route: 
      path: /user/** 
      service-id: provide-user
ribbon: 
   eureka: 
     enabled: false   # 为Ribbon禁用Eureka
provide-user:  # 这边是serviceId
   ribbon: 
     listOfServers: http://localhost:4011,http://localhost:4012

2.7、使用正则表达式指定Zuul的路由匹配规则

借助PatternServiceRouteMapper,实现从微服务到映射路由的正则配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
@SpringBootApplication
@EnableZuulProxy
public  class  Application {
     public  static  void  main(String[] args) {
         SpringApplication.run(Application. class , args);
     }
     
     /*正则表达式指定Zuul的路由匹配规则**/
     @Bean
     public  PatternServiceRouteMapper serviceRouteMapper() {
         return  new  PatternServiceRouteMapper( "(?<name>^.+)-(?<version>v.+$)" "${version}/${name}" );
     }
}

说明:上面将如provide-user-v2这个微服务,映射到/v2/provide-user/**这个路径上

 例:我们队微服务的serviceId命名为provide-user-v2,那么我们可以这么来访问http://localhost:5017/v2/provide-user/1

2.8、路由前缀

设置 zuul.prefix 可以为所有的匹配增加前缀, 例如 /api,代理前缀默认会从请求路径中移除(通过zuul.stripPrefix=false可以关闭这个功能),zuul.stripPrefix默认为true.

如:配置全局的,与prefix一起使用

1
2
3
zuul:
   prefix: /api
   strip-prefix: true

当strip-prefix=true的时候 (http://localhost:5016/api/provide-user/1 -> http://localhost:4011/1)  

当strip-prefix=false的时候(http://localhost:5016/api/provide-user/1 -> http://localhost:4011/api/1)  

说明上面为true的配置,当访问zuul的/api/provide-user/1路径,请求将会被转发到provide-user微服务的/1路径


如:配置局部的,与path一起使用

1
2
3
4
5
zuul:
   routes:
     provide-user: 
       path: /user/**
       strip-prefix: false

当strip-prefix=true的时候 (http://localhost:5016/user/1 -> http://localhost:4011/1)  

当strip-prefix=false的时候(http://localhost:5016/user/1 -> http://localhost:4011/user/1)

说明上面为true的配置,当访问zuul的/user/1路径,请求将会被转发到provide-user微服务的/1路径

2.9、忽略某些路径

2.2中有讲有忽略微服务,但是有时需要更细粒度的路由控制。如,想让Zuul代理某个微服务,同时又想保护该微服务的某些敏感路径。此时,可使用ignored-patterns指定忽略的正则,如:

1
2
zuul:
   ignored-patterns: /**/provide-user/**  # 忽略所有包含/provide-user/的路径

本文转自我爱大金子博客51CTO博客,原文链接http://blog.51cto.com/1754966750/1958422如需转载请自行联系原作者

我爱大金子
目录
打赏
0
0
0
0
90
分享
相关文章
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
583 70
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
592 14
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
93 2
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
微服务(五)-服务网关zuul(一)
微服务(五)-服务网关zuul(一)
利用服务网格实现全链路mTLS(一):在入口网关上提供mTLS服务
阿里云服务网格(Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容Istio开源服务网格,用于简化服务治理,包括流量管理和拆分、安全认证及网格可观测性,有效减轻开发运维负担。ASM支持通过mTLS提供服务,要求客户端提供证书以增强安全性。本文介绍如何在ASM入口网关上配置mTLS服务并通过授权策略实现特定用户的访问限制。首先需部署ASM实例和ACK集群,并开启sidecar自动注入。接着,在集群中部署入口网关和httpbin应用,并生成mTLS通信所需的根证书、服务器证书及客户端证书。最后,配置网关上的mTLS监听并设置授权策略,以限制特定客户端对特定路径的访问。
224 2
👀探秘微服务:从零开启网关 SSO 服务搭建之旅
单点登录(Single Sign-On,简称SSO)是一种认证机制,它允许用户只需一次登录就可以访问多个应用程序或系统。本文结合网关和SaToken快速搭建可用的Session管理服务。
233 8

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等