请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Feign和RestTemplate 怎么处理降级的返回?

  • 普通spring mvc的资源用UrlBlockHandler
  • @SentinelResourceblockHandlerfallback
  • RestTemplate 的@SentinelRestTemplate也有blockHandlerfallback,但这是个总入口,怎么细分呢?
  • Feign 的@FeignClientfallback对应的是Hystrix,能适用sentinel吗?

正在回答

1回答

1. 普通spring mvc的资源用UrlBlockHandler

是的

2. @SentinelResource 用 blockHandler,fallback

是的

3. RestTemplate 的@SentinelRestTemplate也有blockHandler,fallback,但这是个总入口,怎么细分呢?

对于RestTemplate没法细分哈,你继续往下看,最后一段就可以解释为什么没法细分。

4. Feign 的@FeignClient的fallback对应的是Hystrix,能适用sentinel吗?

FeignClient的fallback并没有对应xxx,你如果使用的是spring-cloud-starter-netflix-hystrix,那么就是Hystrix,如果用的是starter-alibaba-sentinel,那么就是Sentinel。本质的原因,是如果整合了Hystrix,那么用的是HystrixFeign去构建Feign的实例;如果用的是Sentinel,那么用的是SentinelFeign。


----------

您的总结挺好的,不过可以深化一下,不用把blockHandler、fallback想地太复杂。会很累的。你就想象成是个try...catch...就OK了。

发生xxx异常,就进入fallback/blockHandler。只不过,fallback/blockHandler处理的异常不一样,另外对于fallback,不同的版本处理的异常也不大一样而已。

而RestTemplate的调用,使用的是相同API去调用的,你很难根据请求目标地址不同,去指定不同的blockHandler处理。当然,理论上,在blockHandler里面,使用反射,可以拿到this,然后拿到请求的目标地址,然后做区分处理也是可以的。不过这种方式我没试过,而且想想都感觉复杂,可读性比较差。

1 回复 有任何疑惑可以回复我~
  • 提问者 zengchen #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-08-19 15:21:37
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信