Feign远程调用,Sentinel限流。
如何将Feign整合Sentinel实现服务容错?
如何获取Feign远程调用时的异常进行问题排查?
本章代码已分享至Gitee:https://gitee.com/lengcz/springcloudalibaba01.git
- 引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
- 开启feign对sentinel的支持
feign:sentinel:enabled:true#开启feign对sentinel的支持
- 设置容错的类@FeignClient(value=“server-product”,fallback = ProductServiceFallback.class)
/** * value用于指定调用的nacos下哪个微服务<br> * fallback用于指定当前feign接口容错类 */@FeignClient(value="server-product",fallback=ProductServiceFallback.class)publicinterfaceProductService{@RequestMapping("/product/{pid}")ProductfindById(@PathVariableInteger pid);}
4. 实现容错方法(当远程服务不可用时,进行服务容错,进入fallback指定的类的同名方法)
/** * 容错类,需要实现Feign所在的接口,并去实现接口中的所有方法,一旦Feign远程调用出现问题了,就会进入当前类的同名方法,执行容错逻辑 */@ServicepublicclassProductServiceFallbackimplementsProductService{@OverridepublicProductfindById(Integer pid){Product product=newProduct(); product.setPid(-1); product.setPname("远程调用微服务异常,进入容错");return product;}}
注:容错类的方法的返回值、方法名、参数必须和原来保持一致。
-
修改controller,当pid为-1表示下单失败。
-
启动order和product对应的微服务,发起请求测试,正常情况下可以查询到 Product的信息。
当将product微服务停止了,再次请求下单接口。
从第一节的内容,我们可以看到,当调用外部微服务发生异常时,我们并不能看到发生了什么异常,这导致我们很难进行问题排查。使用FacllbackFactory接口,就可以获取到Feign远程调用时发生的异常了。如何操作呢?对第一节的demo进行小小的改动。
- 实现FallbackFactory
/** * 容错类,需要实现Feign所在的接口,并去实现接口中的所有方法,一旦Feign远程调用出现问题了,就会进入当前类的同名方法,执行容错逻辑 */@Service@Slf4jpublicclassProductServiceFallbackFactoryimplementsFallbackFactory<ProductService>{@OverridepublicProductServicecreate(Throwable throwable){ log.error("======"+throwable.getMessage());returnnewProductService(){@OverridepublicProductfindById(Integer pid){Product product=newProduct(); product.setPid(-1); product.setPname("FallbackFactory远程调用微服务异常,进入容错");return product;}};}}
- 指定fallbackFactory=ProductServiceFallbackFactory
/** * value用于指定调用的nacos下哪个微服务<br> * fallback用于指定当前feign接口容错类 *///@FeignClient(value="server-product",fallback = ProductServiceFallback.class)@FeignClient(value="server-product",fallbackFactory=ProductServiceFallbackFactory.class)publicinterfaceProductService{@RequestMapping("/product/{pid}")ProductfindById(@PathVariableInteger pid);}
- 只启动order微服务进行请求测试,可以发现能看到Feign调用的异常信息。
通过实现FallbackFactory<要实现的接口类>,我们可以捕获到发生的异常进行记录和处理,进行问题排查。
热门文章
- 12月6日|SSR/V2ray/Shadowrocket/Clash每天更新22.6M/S免费节点订阅链接,付费节点订阅推荐
- 动物疫苗类型分类标准(动物疫苗包括哪些)
- 宠物打疫苗要空腹吗(宠物打预防针注意事项)
- 11月12日|Clash/V2ray/SSR/Shadowrocket每天更新21.5M/S免费节点订阅链接,付费节点订阅推荐
- 12月8日|V2ray/SSR/Clash/Shadowrocket每天更新18.9M/S免费节点订阅链接,付费节点订阅推荐
- 11月5日|Shadowrocket/V2ray/Clash/SSR每天更新19.7M/S免费节点订阅链接,付费节点订阅推荐
- 动物防疫检疫站可以打疫苗吗(动物防疫检疫站可以看病吗)
- 成都领养犬(成都领养狗狗贴吧)
- 动物防疫站给狗狗打的疫苗有没有效果 动物防疫站给狗狗打的疫苗有没有效果啊
- Pandas 如何处理超大规模数据