解决SpringCloud Gateway Finchley.SR2服务宕机,不走熔断报fallbackCmd failed and fallback failed.问题...

在项目中,遇到网关Gateway路由的服务宕机,但是最后并没有走熔断的重定向。

在Gateway的application.yml文件中有配置:

filters:

            - RewritePath=/olesellercenter/(?<segment>.*), /$\{segment} 

    #路由重写

            - name: Hystrix                  

        #熔断过滤器

              args:

                name: fallbackCmd  

                    #符合Java命名规范即可

                fallbackUri: forward:/fallback/serviceFailurePage 

        #服务器访问失败,会出现熔断,这是一个重定向

 

配置了熔断,如果服务宕机,路由不到服务,会走熔断。自己让一个Controller处理该转发,如下所示:

@RestController

@RequestMapping("/fallback")

public class FallbackController {

 

@GetMapping("/sellercenter")

public String fallback() {

return "商家服务繁忙,请稍后重试";

}

}

但是,在实际中会报出一个很奇怪的问题,就是可以处理GET方式的请求,就是说,当服务宕机后,

以GET方法走网关,访问服务,会出现熔断机制

,会报出“商家服务繁忙,请稍后重试”,但是以POST方式请求,不会走熔断,当时是百思不得其解。

后来想想,既然我这个Controller里有GetMapping

方式映射。是不是缺少PostMapping映射导致的原因,后来加上PostMapping映射,果然,问题迎刃而解。

即:

@RestController

@RequestMapping("/fallback")

public class FallbackController {

 

@GetMapping("/sellercenter")

public String fallback() {

return "商家服务繁忙,请稍后重试";

}

 

@PostMapping("/sellercenter")

public String postFallback() {

return "商家服务繁忙,请稍后重试";

}

}

 

后来仔细想想:当以post方式通过网关访问服务,服务宕机,Gateway此时会进行重定向,走熔断,

会以客户端的post请求走熔断器,而自己的Controller处理程序没有PostMapping映射,所以会出现以Post请求的方式不走熔断的机制。

网上看了很多资料,也有很多相似的问题,希望有相同问题的小伙伴看到这篇文章,可以解决你们的问题!!!

 

转载于:https://www.cnblogs.com/jinshuaishuai/p/10936437.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值