开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段:实现 FallbackFactory 容错获取异常】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/684/detail/11884
实现 FallbackFactory 容错获取异常
用 FallbackFactory 实现容错获取异常
如何使用 Fegin 整合 Sentinel 实现服务容错,但是使用这种方式达不到容错过程中产生的异常。没有异常就无法进入日志。
对以后的运维都是非常不良好的,Sentinel 提供了另外一种方式,允许我们在编写容错类的时候,实现一个叫 FallbackFactory 的接口,它的内部有一个叫 create 的方法,能传入这个过程中产生的异常。
重构容错类
按照要求实现 FallbackFactory 的接口,接口中要传递一个泛型,泛型中是要为哪个接口产生容错类。
Package com.itheima.service.fallback;
Import com.itheima.servicr.ProductService;
Import feign.hystrix.FallbackFactory;
Publicclass ProductServiceFallbackFactory implements FallbackFactory <ProductService>{
}
为容错类连上接口,实现方法
//这是一个容错类,他要求我们要是实现一个 FallbackFactory< 要为哪个接口产生容错类>
Public class ProductServiceFallbackFactory implements FallbackFactory <ProductService> {
@Override
Public productService creat(Throwable throwable) (
)
代码编写,这里采用异名内部类,将原来的逻辑粘贴即可。
//Throwable 这就是 fegin 在调用过程中产生异常
@Override
Public ProductService creat(Throwable throwable) (
Return new ProductService() {
@Override
Public product findBypid(Integer pid) {
Log.error(“{}”,throwable);
Product product=new Product();
Product.setpid(-100);
Product setPname
(“商品微服务调用出现异常了,已经进入到了容错方法中”)
Return product;
)
);
将Service放到容器里
另外,还需要加一个 Fallbackfactory 指定调用容错类,fallback 和 fallbackfactory只能用一个。
Value=”service-product”,
//fallback=ProductServiceFallback.class,
fallbackFactory=ProductServiceFallbackFactory.class
重新启动两个微服务后,模拟下单
{
“oid”:11
“uid”:1
“username”:”
测试用户”,
“pid”:1.
“pname”:”
小米”.
“ppcice”,1000
“number”:1
}
将 product 停掉,order application 中的指示清掉后,此时下单都是失败的。
{
“cid”:-100.
“uid”:null.
“username”:null.
“pid”:null.
“pname”:”
x下单失败”.
“ppcice”:null.
“number”:null
}
这样操作,异常也可以打印到 order 上了