Zuul中的路由转发

最直观的理解:“路由”是指根据请求URL,将请求分配到对应的处理程序。在微服务体系中,Zuul负责接收所有的请求。根据不同的URL匹配规则,将不同的请求转发到不同的微服务处理。
  zuul:
    routes:
      product-service: # 这里是路由id,随意写
        path: /product-service/** # 这里是映射路径
        url: http://127.0.0.1:9002 # 映射路径对应的实际url地址
        sensitiveHeaders: #默认zuul会屏蔽cookie,cookie不会传到下游服务,这里设置为空则取
  消默认的黑名单,如果设置了具体的头信息则不会传到下游服务
只需要在application.yml文件中配置路由规则即可:
  product-service:配置路由id,可以随意取名
  url:映射路径对应的实际url地址
  path:配置映射路径,这里将所有请求前缀为/product-service/的请求,转发到http://127.0.0.1:9002处理
配置好Zuul路由之后启动服务,在浏览器中输入 http://localhost:8080/product-service/product/1 ,即可访问到订单微服务。

面向服务的路由#

微服务一般是由几十、上百个服务组成,对于一个URL请求,最终会确认一个服务实例进行处理。如果对每个服务实例手动指定一个唯一访问地址,然后根据URL去手动实现请求匹配,这样做显然就不合理。
Zuul支持与Eureka整合开发,根据ServiceID自动的从注册中心中获取服务地址并转发请求,这样做的好处不仅可以通过单个端点来访问应用的所有服务,而且在添加或移除服务实例的时候不用修改Zuul的路由配置。

(1)添加Eureka客户端依赖#

  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  </dependency>

(2)开启Eureka客户端发现功能#

@SpringBootApplication
@EnableZuulProxy   // 开启Zuul的网关功能
@EnableDiscoveryClient
public class ZuulServerApplication {
  public static void main(String[] args) {
      SpringApplication.run(ZuulServerApplication.class, args);
  }
}

(3)添加Eureka配置,获取服务信息#

  eureka:
    client:
      serviceUrl:
        defaultZone: http://127.0.0.1:8761/eureka/
        registry-fetch-interval-seconds: 5 # 获取服务列表的周期:5s
    instance:
      preferIpAddress: true
      ip-address: 127.0.0.1

(4)修改映射配置,通过服务名称获取#

因为已经有了Eureka客户端,我们可以从Eureka获取服务的地址信息,因此映射时无需指定IP地址,而是通过服务名称来访问,而且Zuul已经集成了Ribbon的负载均衡功能。 
  #配置路由规则
  zuul:
    routes:
      product-service: # 这里是路由id,随意写
        path: /product-service/** # 这里是映射路径
        serviceId: shop-service-product #配置转发的微服务名称
serviceId: 指定需要转发的微服务实例名称 
依次启动Eureka,商品微服务,API网关,在浏览器上通过访问 http://localhost:8080/product-service/product/1 查看最终效果

简化的路由配置#

在刚才的配置中,我们的规则是这样的:
  zuul.routes.<route>.path=/xxx/** : 来指定映射路径。 <route> 是自定义的路由名
  zuul.routes.<route>.serviceId=/product-service :来指定服务名。
而大多数情况下,我们的 <route> 路由名称往往和服务名会写成一样的。因此Zuul就提供了一种简化的配置语法: zuul.routes.<serviceId>=<path>
上面的配置可以简化为一条:
  zuul:
    routes:
      shop-service-product: /product-service/**

默认的路由规则#

在使用Zuul的过程中,上面讲述的规则已经大大的简化了配置项。但是当服务较多时,配置也是比较繁琐的。因此Zuul就指定了默认的路由规则:
  默认情况下,一切服务的映射路径就是服务名本身。
    例如服务名为: shop-service-product ,则默认的映射路径就是: /shop-service-product/**

Zuul加入后的架构 #

posted @   1640808365  阅读(1022)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-07-29 多态、以及常用的关于类的方法(isinstance、issubclass、slots等)运算符重载的实现、上下文管理等
点击右上角即可分享
微信分享提示
主题色彩