解决时间格式导致的Hystrix circuit short-circuited and is OPEN问题

解决Hystrix circuit short-circuited and is OPEN问题

问题描述

	使用Spring Cloud Fegin调用内部接口时报错:Hystrix circuit short-circuited and is OPEN
(服务调用短路熔断)

解题思路&解题过程

    解题思路:该问题是由于服务之间Fegin接口调用,连续调用失败二十次以上导致的Hystrix服务熔断导致的问题,被调用方此时会拒绝外部对该接口的调用,拒绝时间默认5秒钟。
    首先考虑自己的服务接口,请求本身就具有失败的可能,允许失败但不允许服务熔断,此时可以对被调用服务设置hystrix。这里我允许失败次数时1000个,这个数值过大可能会引起服务雪崩,具体要根据自己的实际情况设置。
    当然我这里并不允许存在失败的情况,要找出失败的原因

#负载配置
ribbon:
	#负载均衡超时设置和请求的超时
  ReadTimeout: 60000
  SocketTimeout: 60000
#熔断配置
hystrix:
  command:
    default:
    #断路器超时设置和请求的超时
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 60000
     #设置熔断器失败的个数
    circuitBreaker:
      requestVolumeThreshold: 1000
   #设置核心线程数
  threadpool:
    default:
      maxQueueSize: 1000

延申问题

  向上排查最初错误的时候发现报错:feign.FeignException$BadRequest: status 400 reading XXX

延申问题解题思路

    这个问题是Fegin调用的时候接口调用404啦,两个原因:

  1. 被调用的接口没有这个服务。
  2. 由于请求参数过长导致为问题。

第一个原因很简单,直接排查被调用服务是否有该接口。悟空这边没有这个问题,略过~
第二个原因常见使用@param传参,会导致参数过长,所以采用application/json传参,使用@RequestBody接受参数,将参数使用该方法传参,获取请求参数为{"endTime":"2021-03-23 00:00:00","startTime":"2021-03-22 00:00:00","tenantId":1},参数并不长,问题还是没有解决。
    继续排查,尝试对时间格式处理,加上注解如下,对时间进行格式化

	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;

    至此问题解决。

解题思考

    出现Hystrix circuit short-circuited and is OPEN,一定要排查请求失败原因。

   思考:FeignException$BadRequest: status 400 reading XXX 报错根本原因是否是请求参数,
接口无法接收导致,可能与长度无关,长度过长只是无法接收的一个原因。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值