Spring Cloud Gateway 是Spring Cloud生态中的一款API网关服务,它可以实现服务路由、负载均衡、熔断降级等功能,以下是Spring Cloud Gateway的基本配置步骤和要点:
1. 引入依赖
首先确保在项目中引入Spring Cloud Gateway的依赖,可以通过Maven或Gradle构建工具添加相关依赖。
Xml 1<!-- Maven配置 --> 2<dependency> 3 <groupId>org.springframework.cloud</groupId> 4 <artifactId>spring-cloud-starter-gateway</artifactId> 5 <version>对应版本号</version> 6</dependency>
2. 配置YAML文件
在application.yml或application.properties文件中配置路由规则。以下是一个基本的路由配置示例:
Yaml 1spring: 2 cloud: 3 gateway: 4 routes: 5 - id: payment_service_route 6 uri: lb://payment-service # 目标服务名称,这里通过服务发现机制路由到名为payment-service的服务 7 predicates: 8 - Path=/api/payment/** # 匹配路径规则 9 filters: 10 - StripPrefix=1 # 移除路径前缀 11 12 - id: static_route 13 uri: https://www.example.com/news # 直接路由到固定URL 14 predicates: 15 - Host=example.com
3. 路由核心概念
路由(Route):定义了请求如何路由到目标服务,包括ID(唯一标识符)、目标URI、断言集合和过滤器集合。
断言(Predicate):基于HTTP请求的某些部分(如headers、path、query parameters等)进行匹配的条件。当请求满足断言时,路由才会生效。
过滤器(Filter):在请求路由前后执行的操作,可用于身份验证、日志记录、限流、修改请求/响应头等。
4. 动态路由
若目标URI指向微服务注册中心的服务名(如lb开头的URI),Gateway会自动从Eureka、Consul或其他注册中心查找对应服务实例,并进行负载均衡。
5. 高级配置
可以通过编程方式创建RouteLocator接口的实现类来动态配置路由。
可以自定义过滤器并添加到路由中,例如实现GatewayFilter工厂。
示例代码配置类
若希望通过Java配置类来配置路由,可以创建一个@Configuration类,并注入RouteLocatorBuilder,然后使用它来构建路由:
Java 1@Configuration 2public class GatewayConfig { 3 4 @Bean 5 public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { 6 return builder.routes() 7 .route("payment_route", r -> r.path("/payment/**") 8 .filters(f -> f.stripPrefix(1)) 9 .uri("lb://payment-service")) 10 .build(); 11 } 12}
注意事项
路由匹配遵循优先原则,即请求会最先匹配到满足条件的第一个路由。
若配置了多个断言,请求需要同时满足所有断言才能匹配路由。
路由过滤器的执行顺序可以根据过滤器工厂的order属性进行排序。