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 中如何排除路由就介绍完了,下节将介绍路由前缀。
点击下载/查看本教程相关资料或者源代码。