Spring Cloud Gateway作为API网关,可以通过配置文件来定义路由规则、过滤器和相关参数。
参入如下:
-
routes: 定义了一组路由规则,每个路由规则包含了路由的ID、目标URI、断言集合和过滤器集合。
- id: 路由的唯一标识符,用于区分不同的路由规则。
- uri: 请求最终被转发到的目标地址,可以是具体的URL或者服务名称。
- predicates: 断言集合,用于定义路由匹配的条件,如路径、方法、头信息等。可以使用多种断言类型,如Path、Method、Header等。
- filters: 过滤器集合,用于在请求被路由前后对请求或响应进行修改。可以添加多个过滤器,按照顺序执行。
- order: 路由的优先级,数字越小,优先级越高。当有多个路由规则匹配时,将根据优先级选择最合适的路由。
- default-filters: 默认的过滤器配置,可以全局应用。这些过滤器将应用于所有的路由规则。
-
discovery.locator.enabled: 当设置为true时,Spring Cloud Gateway将从服务发现客户端获取服务实例信息,以实现负载均衡。这需要与服务注册中心(如Eureka)配合使用。
-
hystrix.command: 与Hystrix相关的配置,可以设置降级和熔断的相关参数。Hystrix是一个用于处理分布式系统中的容错和隔离的工具。
- fallbackUri: 指定降级时的备用URI,当请求失败时会转发到该URI进行处理。
- execution.isolation.thread.timeoutInMilliseconds: 设置Hystrix命令执行的超时时间,单位为毫秒。
-
requestratelimiter: 用于设置请求速率限制的参数,如
replenishRate
和burstCapacity
。- key-resolver: 用于解析请求的键值,用于确定是否超过速率限制。
- redis-rate-limiter.replenishRate: 每秒允许的请求数。
- redis-rate-limiter.burstCapacity: 令牌桶的最大容量。
-
stripPrefix: 用于配置是否移除请求路径的前缀。例如,如果设置为1,则请求路径中的前缀将被删除。
-
preserveHostHeader: 用于配置是否保留原始请求的
Host
头信息。如果设置为false,则在转发请求时将不包含原始的Host
头信息。 -
retry: 用于配置请求重试的策略,如重试次数和状态码。
- retries: 重试次数。
- methods: 指定哪些HTTP方法需要进行重试,如GET、POST等。
- backoff: 退避策略,用于控制重试之间的等待时间。
- firstBackoff: 第一次重试的等待时间。
- maxBackoff: 最大等待时间。
- factor: 退避因子,用于计算后续重试的等待时间。
- jitter: 抖动因子,用于增加重试之间的随机性。
-
requestSize: 用于限制客户端请求体的最大大小。可以设置一个具体的大小,如10MB。
-
modifyRequestBody: 用于修改请求体内容的配置。
- replace: 替换请求体中的内容。
- from: 要替换的原始内容。
- to: 替换后的新内容。
- replace: 替换请求体中的内容。
yml配置示例
spring:cloud:gateway:# 定义路由规则routes:- id: route_iduri: http://example.compredicates:- Path=/api/**filters:- StripPrefix=1- name: RequestRateLimiterargs:key-resolver: "#{@ipKeyResolver}"redis-rate-limiter.replenishRate: 10redis-rate-limiter.burstCapacity: 20order: 100default-filters:- name: Retryargs:retries: 3methods: GET,POSTbackoff:firstBackoff: 100msmaxBackoff: 1000msfactor: 2jitter: 0.2# 其他路由规则...# 配置服务发现客户端discovery:locator:enabled: true# 配置 Hystrixhystrix:command:fallbackUri: forward:/fallbackexecution:isolation:thread:timeoutInMilliseconds: 2000# 配置请求体大小限制requestSize:maxSize: 10MB# 配置请求体修改modifyRequestBody:replace:from: "oldValue"to: "newValue"
网关的在项目中的应用
Spring Cloud Gateway主要用于作为API网关,提供路由、安全、监控等功能。它是基于Spring 5和Spring Boot 2构建的,是一个响应式的API网关。
首先,Gateway在微服务架构中扮演着重要的角色,它不仅是请求的入口点,还负责请求的分发和增强。以下是Gateway的一些关键功能:
- 请求路由:根据请求的属性(如header、路径、参数等)将请求转发到相应的服务。
- 服务发现:与服务注册中心集成,实现负载均衡和服务实例的选择。
- 安全性:提供身份验证和授权功能,确保只有合法请求能够访问后端服务。
- 监控和指标:记录和报告网关的性能指标,帮助开发者了解系统的运行状况。
- 容错性:通过集成Hystrix等工具,提供熔断和降级功能,保护系统在故障时的稳定性。
- 限流:通过配置请求速率限制,防止系统过载。
- 路径改写:在将请求转发到后端服务之前,可以对请求的路径进行修改。
总的来说,Spring Cloud Gateway是专为微服务架构设计的API网关,它不仅提供了强大的路由功能,还支持服务的发现、安全控制、监控和容错等,是构建微服务系统的重要组件。