Netflix Zuul 是一个 API 网关,它可以对微服务架构中的请求进行路由、过滤等操作。路由排除是指在 Zuul 的路由配置中,指定某些请求不经过正常的路由规则,可能是直接跳过某些微服务路由,或者不进行某些预定义的过滤操作。
在 Zuul 的配置文件(通常是 application.yml 或 application.properties)中,可以使用 zuul.ignored-patterns 属性来指定要排除的路径模式。例如,在 application.yml 中存在如下配置:
# 路由规则
zuul:
# URL 地址排除,排除所有包含 /order/ 的路径
ignored-patterns: /**/order/**
# 路由配置
routes:
#...示例:基于前面 zuul 简单用法。
# 基于路径的排除
zuul:
# URL 地址排除,排除所有包含 /order/ 的路径
ignored-patterns: /**/order/**
# 路由配置
routes:
# 路由名称,必须唯一
service-order:
# 匹配服务路径前缀
path: /api/order/**
# 指定实际服务名,服务名在 eureka 中注册
service-id: service-order
service-product:
path: /api/product/**
service-id: service-product此时,重启 zuul 网关,访问 http://localhost:9000/api/order/order/1 地址,返回 404 错误,如下图:

注意,如果你需要排除多个路径,如排除任何包含 /order/ 和 /product/ 的路径,配置如下:
zuul:
# URL 地址排除,排除所有包含 /order/ 和 /product/ 的路径
ignored-patterns:
- /**/order/**
- /**/product/**
# 路由配置
routes:
# 路由名称,必须唯一
service-order:
# 匹配服务路径前缀
path: /api/order/**
# 指定实际服务名,服务名在 eureka 中注册
service-id: service-order
service-product:
path: /api/product/**
service-id: service-product如果要排除对某个特定服务的路由,可以使用 zuul.ignored-services 属性。假设我们有一个名为 service-order 的微服务,想要排除对它的路由,在 application.yml 中可以这样配置:
zuul:
# 基于服务名排除,多个服务名使用逗号分隔
# 注意,* 表示排除所有服务
ignored-services: service-order
# 路由配置
routes:
service-product:
path: /api/product/**
service-id: service-product注释掉 ignored-services 配置,访问 http://localhost:9000/service-order/order/1 地址效果如下图:

放开 ignored-services 配置的注释,访问效果如下图:

到这里,Zuul 中如何排除路由就介绍完了,下节将介绍路由前缀。
点击下载/查看本教程相关资料或者源代码。