简介SpringCloud gateWay 是为微服务架构提供一种简单有效的统一的API路由管理方式。SpringCloud GateWay 作为 SpringCloud 生态系统中的网关是基于WebFlux框架实现的而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty.SpringCloud GateWay 的目标提供统一的路由方式且基于 Filter 链的方式提供了网关基于的功能。例如安全监控/指标限流。官方地址SpringCloud gateway官网地址https://spring.io/projects/spring-cloud-gateway#overview特性基于 Spring Framework 和 Spring Boot 进行构建。兼容 Spring WebFlux 和 Spring Web MVC。动态路由能够匹配任何请求属性。可以对路由指定 断言 和 过滤器。集成 Hystrix 的断路器功能。集成 Spring Cloud 服务发现功能。易于编写的 断言 和 过滤器。请求限流功能支持路径重写。在项目中可以使用gateWay做反向代理、鉴权、流量控制、熔断、日志监控等。核心概念1、 三大核心Route(路由)路由是构建网关的基本模块它由ID目标URL一系列的断言和过滤器组成如果断言为 TRUE 则匹配该路由。Predicate(断言)匹配HTTP请求中的所有内容例如请求头或请求参数如果请求与断言相匹配则进行路由。Filter(过滤)使用过滤器可以在请求被路由前或者之后对请求进行修改。2、工作流程客户端向Spring Cloud Gateway发出请求。如果网关处理程序映射确定请求与路由匹配则将其发送到网关Web处理程序。 此处理程序通过特定于请求的筛选器链运行请求。 过滤器用虚线分隔的原因是过滤器可以在发送代理请求之前和之后运行逻辑。 执行所有的预过滤器逻辑然后发出代理请求。发出代理请求后将运行post过滤器逻辑。客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到实际的服务执行业务逻辑然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前“pre”或之后“post”执行业务逻辑。Filter在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等在“post”类型的过滤器中可以做响应内容、响应头的修改日志的输出流量监控等有着非常重要的作用。Predicate(断言)GateWay官网对于断言配置解释https://docs.spring.io/spring-cloud-gateway/reference/4.3/spring-cloud-gateway-server-webmvc/gateway-request-predicates.htmlAfterBefore, Betweenspring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能利用微服务名进行路由 routes: - id: payment_routh #payment_route #路由的ID没有固定规则但要求唯一建议配合服务名 # uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://CLOUD-PROVIDER-HYSTRIX-PAYMENT #匹配后提供服务的路由地址 predicates: - Path/payment/circuit/** # 断言路径相匹配的进行路由 - After2026-01-19T11:00:00.68508:00[Asia/Shanghai] - Before2026-01-19T19:00:00.68508:00[Asia/Shanghai] - Between2026-01-19T11:00:00.68508:00[Asia/Shanghai],2026-01-19T19:00:00.68508:00[Asia/Shanghai]After: 表示在配置的时间之前进行访问会出现错误Before表示在配置的时间之前可以进行访问页面Between 表示在配置的时间区间能够正常的进行访问Cookie指定Cookie里面携带某个值时可以访问服务例如Cookie里面必须要带用户名spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能利用微服务名进行路由 routes: - id: payment_routh #payment_route #路由的ID没有固定规则但要求唯一建议配合服务名 # uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://CLOUD-PROVIDER-HYSTRIX-PAYMENT #匹配后提供服务的路由地址 predicates: - Path/payment/circuit/** # 断言路径相匹配的进行路由 - Cookieusername, lisi1Cookie携带多个值或关系--第一种 spring: cloud: gateway: routes: - id: cookie-multi-value-route uri: http://localhost:8081 predicates: - CookieuserType, admin - CookieuserType, test - CookieuserType, guest --第二种 spring: cloud: gateway: routes: - id: cookie-multi-value-route uri: http://localhost:8081 predicates: # 匹配Cookie键为userType值为admin、test、guest中的任意一个 - CookieuserType, ^(admin|test|guest)$2Cookie携带多个值与关系spring: cloud: gateway: routes: - id: multi-cookie-route uri: http://localhost:8081 predicates: # 必须同时满足Cookie包含tokenabc123 且 userId1001 - Cookietoken, abc123 - CookieuserId, 1001Head请求头携带某个值时可以访问服务spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能利用微服务名进行路由 routes: - id: payment_routh #payment_route #路由的ID没有固定规则但要求唯一建议配合服务名 # uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://CLOUD-PROVIDER-HYSTRIX-PAYMENT #匹配后提供服务的路由地址 predicates: - Path/payment/circuit/** # 断言路径相匹配的进行路由 - HeaderX-Request-Id, \d # 请求头要有X-Request-Id属性并且值为整数的正则表达式Host限制某些地址才能访问多个用逗号分隔支持Ant风格spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能利用微服务名进行路由 routes: - id: payment_routh #payment_route #路由的ID没有固定规则但要求唯一建议配合服务名 # uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://CLOUD-PROVIDER-HYSTRIX-PAYMENT #匹配后提供服务的路由地址 predicates: - Path/payment/circuit/** # 断言路径相匹配的进行路由 - Host**.hk.com,**.test.comMethod限制某些请求方式才能访问--只允许get请求访问 spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能利用微服务名进行路由 routes: - id: payment_routh #payment_route #路由的ID没有固定规则但要求唯一建议配合服务名 # uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://CLOUD-PROVIDER-HYSTRIX-PAYMENT #匹配后提供服务的路由地址 predicates: - Path/payment/circuit/** # 断言路径相匹配的进行路由 - MethodGETPath路径匹配规则也是使用最多的一种匹配方式spring: application: name: cloud-gateway cloud: gateway: discovery: locator: enabled: true #开启从注册中心动态创建路由的功能利用微服务名进行路由 routes: - id: payment_routh #payment_route #路由的ID没有固定规则但要求唯一建议配合服务名 # uri: http://localhost:8001 #匹配后提供服务的路由地址 uri: lb://CLOUD-PROVIDER-HYSTRIX-PAYMENT #匹配后提供服务的路由地址 predicates: - Path/payment/circuit/** # 断言路径相匹配的进行路由过滤器常见的过滤器GateWay官网对于过滤器解释https://docs.spring.io/spring-cloud-gateway/reference/4.3-SNAPSHOT/spring-cloud-gateway-server-webflux/gatewayfilter-factories.html全局过滤器GateWay官网对于全局过滤器解释https://docs.spring.io/spring-cloud-gateway/reference/4.3-SNAPSHOT/spring-cloud-gateway-server-webflux/global-filters.html自定义过滤器自定义过滤器主要实现GlobalFilter, Ordered接口Component public class MyLogGateWayFilter implements GlobalFilter, Ordered { Override public MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) { System.out.println(进入自定义过滤器...); String name exchange.getRequest().getQueryParams().getFirst(name); if (StringUtils.isEmpty(name)){ System.out.println(名称不能为空...); exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE); return exchange.getResponse().setComplete(); } return chain.filter(exchange); } Override public int getOrder() { return 0; } }补充篇SpringCloud-Gateway 补充生产必备知识点