zuul routes的配置规则介绍

Spring Cloud Zuul:路由规则配置详解
本文介绍了Spring Cloud Zuul中ZuulServlet的核心作用,并详细解析了如何通过YAML配置文件设置路由规则,包括RibbonRoutingFilter、SimpleHostRoutingFilter和SendForwardFilter的使用。示例配置展示了如何自定义路由路径、指定服务ID或URL,以及如何忽略某些路径。同时,提到了prefix配置项的作用,它会影响所有请求的前缀。实例中,网关服务运行在9100端口,后端服务service-sms位于8001端口,提供/send/msg接口。

Zuul最核心的类就是ZuulServlet。使用springcloud的zuul网关,配置routes的规则时,对于routes类型的系统filter有三种:RibbonRoutingFilter、SimpleHostRoutingFilter、SendForwardFilter。

对于使用yaml配置zuul的routes规则介绍,直接看配置文件及注释:

zuul:
  ##敏感头配置为空之后,所有head内容透传给后端服务,即后端服务也可以获取到请求头信息,一般不配置,因为网关就把头部信息的逻辑包了
  sensitive-headers:
  #配置自定义路由规则,不配置routes,使用服务名访问的话默认走RibbonRoutingFilter
  # 不配置routes 使用 http://localhost:9100/service-sms/send/msg可以访问
  routes:
    ##配置path+url 走SimpleHostRoutingFilter 跳转到指定的 URL 中
    # 使用 http://localhost:9100/mytttttt/send/msg 可以访问
    ##provider1这个名称随便写
    provider1:
      path: /mytttttt/**
      url: http://localhost:8001/
    #配置path+servcieId,走默认的RibbonRoutingFilter
    # 使用 http://localhost:9100/mysuibian/send/msg 可以访问
    provider2:
      path: /mysuibian/**
      serviceId: service-sms
    #配置path+servcieId,可以配置多个 使用 http://localhost:9100/suibian/send/msg 可以访问
    provider3:
      path: /suibian/**
      serviceId: service-sms
  # 配置ignored-patterns之后 使用 http://localhost:9100/suibian/send/msg 不可以访问,其他的 /mytttttt/send/msg,/mysuibian/send/msg,/service-sms/send/msg都可以访问
  ignored-patterns: /**/suibian/**
  #配置prefix之后,所有的请求都需要加上/api才能访问,/mytttttt/send/msg,/mysuibian/send/msg,/service-sms/send/msg无法访问,需要使用/api/mytttttt/send/msg,/api/mysuibian/send/msg,/api/service-sms/send/msg进行访问
  prefix: /api

环境说明:

我的网关服务端口是9100.

我的后端服务在eureka中的application.name是service-sms, 这个服务的端口是8001,这个服务提供了一个/send/msg接口

### Zuul 网关的配置代码及详细介绍 Zuul 是 Netflix 开源的一款微服务网关,用于为微服务架构提供代理、过滤和路由等功能。以下是 Zuul 网关的详细配置代码及说明。 #### 1. 配置Zuul 的核心功能通过配置类实现,使用 `@EnableZuulProxy` 注解启用 Zuul 网关功能。 ```java @Configuration @EnableZuulProxy public class ZuulConfig { // 可以在此类中定义自定义过滤器或其他逻辑 } ``` 上述代码定义了一个配置类,并通过注解启用了 Zuul 网关的功能[^1]。 #### 2. 启动类 在启动类中,需要添加必要的注解来支持 Eureka 客户端和服务注册发现功能。 ```java @SpringBootApplication @EnableEurekaClient @EnableZuulProxy public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } } ``` 通过 `@EnableEurekaClient` 和 `@EnableZuulProxy` 注解,启动类能够同时支持 Eureka 服务注册和 Zuul 网关功能[^2]。 #### 3. application.yml 配置文件 以下是 Zuul 网关的基本配置示例: ```yaml server: port: 6670 # 网关服务端口 eureka: client: service-url: defaultZone: http://root:123456@localhost:8083/eureka # Eureka 服务地址 zuul: routes: newsConsumer: /newsConsumer/** # 路由规则,将 /newsConsumer/** 请求转发到名为 newsConsumer 的服务 ignored-services: "*" # 忽略所有服务的默认路由 ``` - `server.port` 指定了网关服务的监听端口。 - `eureka.client.service-url.defaultZone` 配置了 Eureka 服务的地址。 - `zuul.routes` 定义了路由规则,例如将 `/newsConsumer/**` 的请求转发到名为 `newsConsumer` 的服务。 - `zuul.ignored-services` 设置为 `"*"` 表示忽略所有服务的默认路由,仅使用显式定义的路由规则[^2]。 #### 4. 自定义过滤器 Zuul 支持自定义过滤器,用于拦截请求并执行特定逻辑。以下是一个简单的预过滤器示例: ```java @Component public class PreFilter extends ZuulFilter { @Override public String filterType() { return "pre"; // 过滤器类型:pre(请求前)、route(路由时)、post(响应后)、error(错误时) } @Override public int filterOrder() { return 1; // 过滤器顺序,数字越小优先级越高 } @Override public boolean shouldFilter() { return true; // 是否执行该过滤器 } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); System.out.println("Request Method: " + request.getMethod() + ", Request URL: " + request.getRequestURL().toString()); return null; } } ``` 此过滤器会在每个请求到达之前打印请求方法和 URL。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值