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

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于Spring Cloud Gateway跨域问题,你可以通过以下步骤解决: 1. 在你的Spring Cloud Gateway项目中,创建一个全局的跨域配置类,比如命名为CorsConfig。 2. 在CorsConfig类上添加注解`@Configuration`,使其成为一个配置类。 3. 在CorsConfig类中添加一个方法来配置跨域规则,比如命名为addCorsMappings。 4. 在addCorsMappings方法上添加注解`@Bean`,使其成为一个Bean。 5. 在addCorsMappings方法中使用CorsRegistry对象来配置跨域规则。例如: ```java @Configuration public class CorsConfig { @Bean public WebFluxConfigurer corsConfigurer() { return new WebFluxConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("*") .allowedHeaders("*") .exposedHeaders("Authorization") .allowCredentials(true) .maxAge(3600); } }; } } ``` 在上述示例中,通过调用CorsRegistry对象的addMapping方法来添加跨域规则。其中,allowedOrigins设置允许的源(域)地址,allowedMethods设置允许的HTTP方法,allowedHeaders设置允许的请求头,exposedHeaders设置允许暴露的响应头,allowCredentials设置是否允许发送cookie信息,maxAge设置预检请求的缓存时间。 这样配置后,Spring Cloud Gateway就会支持跨域请求了。注意,如果你使用的是WebFlux框架,需要返回WebFluxConfigurer对象并重写addCorsMappings方法;如果使用的是WebMvc框架,则需要返回WebMvcConfigurer对象并重写addCorsMappings方法。 希望以上信息对你有所帮助!如有更多问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

他 他 = new 他()

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

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

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

打赏作者

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

抵扣说明:

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

余额充值