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,然后拿到请求的目标地址,然后做区分处理也是可以的。不过这种方式我没试过,而且想想都感觉复杂,可读性比较差。