码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-05-28 12:52:30      阅读:838      评论:0      收藏:0      [点我收藏+]

标签:ping   请求   路由   也有   min   客户   pos   重试   fail   

在项目中,遇到网关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请求的方式不走熔断的机制。

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

 

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

标签:ping   请求   路由   也有   min   客户   pos   重试   fail   

原文地址:https://www.cnblogs.com/jinshuaishuai/p/10936437.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!