Spring Cloud Alibaba - Sentinel入门案例(七)(补充使用(二) Feign整合Sentinel / 实现FallbackFactory容错获取异常 )

Spring Cloud Alibaba - Sentinel入门案例(七)(补充使用(二) Feign整合Sentinel / 实现FallbackFactory容错获取异常 )

回溯

前面的博文已经讲述了关于Sentinel的简单使用,但是还是有一些需要功能点没有覆盖,这边做一些简单的补充。

Feign整合Sentinel

环境准备

需要启动好 Sentinel 控制台,以及监控一个消费者。
在这里插入图片描述
若对这一步有疑虑,请参考SpringCloud Alibaba - Sentinel入门案例(一)

开始整合

在配置文件中添加以下配置。

feign:
  sentinel:
    enabled: true

创建容错类:此类要求必须实现被容错的接口,并为每个方法实现容错方案。

/**
 * 这是一个容错类
 * 它要求实现Feign所在接口,并实现里面的方法
 * 当feign调用出现问题的时候,就会进入到当前类中同名方法中
 */
@Service
@Slf4j
public class NacosSCZServiceFallBack implements NacosSCZService {
    
    

    @Override
    public String testFunction(String message) {
    
    
        log.error("{}", "进入到feign容错");
        return null;
    }
    
}

若对接口有疑虑,请参考:SpringCloud Alibaba - fegin入门案例(注意事项)

对于接口,我们需要指定容错类:

/**
 * value用于指定调用nacos下哪个微服务
 * fallback 指定当调用出现问题之后,要进入到哪个类中的同名方法之下执行备用逻辑
 */
@FeignClient(value = "test-scz",fallback = NacosSCZServiceFallBack.class)
public interface NacosSCZService {
    
    

    @GetMapping(value = "/scz/testFunction")
    String testFunction(@RequestParam(value = "message") String message);

}

接着,我们进行测试,首先添加一个简单的流控规则,然后观察流控生效的时候有没有执行我们自定义的容错方法。

在这里插入图片描述

在这里插入图片描述

结论:流控生效后,会进入自定义方法。

问题:当发生了容错后,若有错误信息,怎么补货查看。

FallbackFactory容错获取异常

环境准备与上面一致。

Feign 提供了一种方式,可以捕获容错的时候抓取它的错误信息。

新增一个容错类,但是此类不需要继承容错接口

/**
 * 这是容错类,他要求我们要是实现一个FallbackFactory<要为哪个接口产生容错类>
 */
@Component
@Slf4j
public class NacosSCZServiceFallbackFactory implements FallbackFactory<NacosSCZService> {
    
    
    @Override
    public NacosSCZService create(Throwable throwable) {
    
    
        log.error("{}","进入到容错信息的error打印");
        log.error("{}",throwable);
        return message -> {
    
    
            log.error("{}","进入到容错信息的打印");
            return null;
        };
    }
}

修改容接口配置。

/**
 * value用于指定调用nacos下哪个微服务
 * fallbackFactory 指定当调用出现问题之后,要进入到哪个类中的同名方法之下执行备用逻辑
 */
@FeignClient(value = "test-scz",fallbackFactory = NacosSCZServiceFallbackFactory.class)
public interface NacosSCZService {
    
    

    @GetMapping(value = "/scz/testFunction")
    String testFunction(@RequestParam(value = "message") String message);

}

测试结果:
在这里插入图片描述

在这里插入图片描述

结论:流控生效后,会进入自定义方法。

注意事项:

  • fallbackfallbackFactory 只能使用其中一种方式。
  • @SentinelResource 不可添加在容错接口上

猜你喜欢

转载自blog.csdn.net/qq_29064815/article/details/107174650