Spring Cloud(2020.0.3) | 从入门到入土 - 24. Gateway 超时配置 & 跨域配置

Gateway 网关提供了两种超时机制:全局配置、路由配置

一、全局超时

spring:
  cloud:
    gateway:
      httpclient:
        connect-timeout: 1000
        response-timeout: 5s

connect-timeout 指:连接超时,这里单位是毫秒。

response-timeout 值:响应超时,超过 5 秒没有响应,直接超时,这里的配置是遵循 java.time.Duration。

测试:

我们只启动网关,不启动服务,然后进行请求。

可以看到,这里直接报异常信息了。

接下来我们修改一下服务中的代码

启动服务进行测试。

可以看到,直接 504 网关超时。

二、单独配置路由超时

我们除去配置全局的超时机制,还可以对某一个路由机制进行配置。

# 数据源配置
spring:
  cloud:
    gateway:
      httpclient:
        connect-timeout: 1000
        response-timeout: 5s
      routes:
      - id: requestratelimiter_route
        uri: http://localhost:3000/
        predicates:
        - Path=/normal/**
        metadata:
          response-timeout: 7000
          connect-timeout: 2000

通过在路由中添加 metadata 进行配置。

在 metadata 中配置的两个内容是和全局配置的一样的,但是要注意单位,这里只能配置毫秒。

!!!单独给每个路由配置超时,优先走单独的,如果单独的没有配置,直接走全局超时机制。

测试:

下面我们只启动 Gateway 网关进行测试 connection-timeout。

这里主要看这个时间,全局我们配置的连接超时是 1 秒,但是这里 2 秒才进行错误返回,原因就是走的我们单独给这个路由配置的超时。

再来启动业务模块,再来进行请求。

同样,我们这里来看时间。全局配置中响应超时时间是 5 秒,但是这里我们用 6 秒进行返回,而且是正常服务返回,也就是说这里走的是单独配置。

这里要说一句:网关是最后的防线,我们因为微服务中还有断路器,所以网关的超时配置尽量要大于断路器的超时配置。

三、Gateway 跨域配置

之前在使用 SpringBoot + Vue 进行开发的时候,会遇到跨域配置,当时是配置到了 SpringBoot 中,但是现在我们是微服务,需要将这个跨域配置到整个网关中。

在没有配置跨域前请求是这样的,现在在 Gateway 中增加跨域配置。

spring:
  cloud:
    gateway:
      globalcors:
        cors-configurations:
          '[/**]':
            allowedOriginPatterns: "*"
            allowCredentials: true
            maxAge: 3600
            allowedMethods:
            - GET
            - POST
            - PUT
            - HEAD
            - DELETE
            - OPTIONS

详细的配置参数意思:CorsConfiguration (Spring Framework 5.0.20.RELEASE API)

这里是参考我们之前 SpringBoot 中配置跨域进行修改的,然后重新启动 Gateway 服务,从新进行请求

可以看到,服务变成正常了。


这一讲就讲到这里,有问题可以联系我:QQ 2100363119,欢迎大家访问我的个人网站:https://www.lemon1234.com

<think>嗯,用户问的是Spring Cloud 2023.0.3版本的Gateway网关配置。首先,我需要确认这个版本对应的Spring Boot版本,因为Spring CloudSpring Boot有版本依赖关系。根据Spring Cloud的官方文档,2023.0.x版本应该对应Spring Boot 3.2.x版本。这一点很重要,因为不同版本的依赖配置可能会有所不同。 接下来,用户需要的是配置Gateway网关的步骤。首先,我应该想到创建一个新的Spring Boot项目,并添加相应的依赖。Gateway的核心依赖是spring-cloud-starter-gateway,同时可能需要spring-boot-starter-webflux,因为Gateway是基于WebFlux的。不过,在Spring Boot 3之后,可能有些变化,需要确认是否仍然需要显式引入webflux。 然后是配置文件,比如application.yml中的路由配置。路由的基本结构包括id、uri、predicates和filters。需要解释每个部分的作用,比如predicates用于匹配请求的条件,filters用于处理请求和响应。可能还需要提到动态路由、服务发现集成,比如与Nacos或Eureka的结合,但用户没有具体提到,所以可能需要简要提及,但重点放在基础配置上。 另外,可能需要提到如何自定义全局过滤器,比如实现GlobalFilter接口,用于处理鉴权、日志等全局逻辑。这里要注意的是,在Spring Cloud Gateway中,过滤器的执行顺序很重要,可以通过@Order注解来指定顺序。 还有可能涉及域配置,虽然Gateway默认有处理,但在实际项目中可能需要自定义。可以通过配置类来设置CORS规则,比如允许的名、方法等。 另外,用户可能关心如何整合其他组件,比如Hystrix熔断,但新版本中Hystrix已经不再被推荐,应该使用Spring Cloud CircuitBreaker,可能需要配置相应的过滤器。 需要注意的是,Spring Cloud 2023.0.3属于新的版本,可能有一些配置方式的变化,比如是否还需要使用@EnableEurekaClient等注解,或者是否完全依赖自动配置。需要确保提供的代码示例和配置是适用于该版本的。 可能用户在实际操作中会遇到问题,比如依赖冲突,特别是Spring Boot 3.x引入了Jakarta EE 9+,包名从javax变更为jakarta,所以在引入其他库时需要注意兼容性。例如,如果使用Spring Cloud Gateway的JWT过滤器,可能需要调整相关的导入语句。 总结一下,回答的结构应该是先介绍创建项目、添加依赖,然后是基本的路由配置,接着是过滤器和全局配置,最后可能提到动态路由和服务发现。同时需要注意版本兼容性和常见问题,帮助用户避免踩坑。</think>以下是 Spring Cloud 2023.0.3 版本(对应 Spring Boot 3.2.x)的 Gateway 网关配置步骤: --- ### 一、基础环境搭建 1. **创建 Spring Boot 项目** 使用 [start.spring.io](https://start.spring.io/) 创建项目时选择: ```plaintext Spring Boot 3.2.x Dependencies: Gateway, Reactive Web(自动包含) ``` 2. **Maven 依赖** ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> ``` --- ### 二、路由配置(YAML 示例) ```yaml spring: cloud: gateway: routes: - id: user-service-route uri: http://localhost:8081 # 目标服务地址 predicates: - Path=/api/users/** # 路径匹配规则 filters: - StripPrefix=1 # 去掉前缀(去掉/api/users中的/users) - AddRequestHeader=X-Gateway, SpringCloud2023 - id: order-service-route uri: lb://order-service # 结合服务发现(需注册中心) predicates: - Method=GET,POST # 匹配请求方法 - Header=X-Request-Id, \d+ # 正则匹配Header ``` --- ### 三、高级配置项 #### 1. 整合注册中心(以Nacos为例) ```yaml dependencies: <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> spring: cloud: nacos: discovery: server-addr: localhost:8848 gateway: discovery: locator: enabled: true # 开启通过服务ID路由 ``` #### 2. 全局过滤器(示例:日志过滤) ```java import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; @Component public class LoggingFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { System.out.println("请求路径:" + exchange.getRequest().getPath()); return chain.filter(exchange); } @Override public int getOrder() { return -1; // 执行顺序(数字越小优先级越高) } } ``` --- ### 四、常见配置参数说明 | 配置| 作用说明 | |----------------------|----------------------------------| | `spring.cloud.gateway.routes[].id` | 路由唯一标识(必填) | | `predicates` | 匹配条件(支持 Path, Header, Cookie 等) | | `filters` | 过滤器链(支持修改请求/响应、限流等) | | `lb://service-name` | 负载均衡路由(需配合注册中心) | --- ### 五、启动注意事项 1. **不要引入 spring-boot-starter-web** Gateway 基于 WebFlux 实现,与传统的 Servlet 容器冲突 2. **域配置示例** ```java @Configuration public class CorsConfig { @Bean public CorsWebFilter corsWebFilter() { CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin("*"); config.addAllowedMethod("*"); config.addAllowedHeader("*"); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", config); return new CorsWebFilter(source); } } ``` --- ### 六、验证网关是否生效 启动服务后访问:`http://localhost:8080/api/users/1` 将被转发到 `http://user-service:8081/users/1` 如需调试,可在启动参数添加: ```properties -Dreactor.netty.http.server.accessLogEnabled=true ``` 建议通过 Postman 或 curl 工具测试路由转发效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他 他 = new 他()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值