SpringCloud Feign 之 Fallback初体验

Posted lanxuan826

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud Feign 之 Fallback初体验相关的知识,希望对你有一定的参考价值。

SpringCloud Feign 之 Fallback初体验

在微服务框架SpringCloud中,Feign是其中非常重要且常用的组件。Feign是声明式,模板化的HTTP客户端,可以帮助我们更方便快捷调用HTTP API。本文主要针对Feign的熔断机制Fallback进行简单介绍。Fallback主要是用来解决依赖的服务不可用或者调用服务失败或超时,使用默认的返回值。

1.引入Feign

  • pom依赖包

    <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-feign</artifactId>
                <version>1.4.7.RELEASE</version>
    </dependency>
  • 启动类Application增加注解

    @SpringBootApplication(scanBasePackages = "com.xiaoqiang.feigncomsumer")
    @EnableFeignClients(basePackages = "com.xiaoqiang.feigncomsumer")
    @EnableEurekaClient
    public class FeigncomsumerApplication 
        public static void main(String[] args) 
            SpringApplication.run(FeigncomsumerApplication.class, args);
        
    
    
  • 接口类配置

    @FeignClient(name = "$feign.provider",path = "/feignprovider")
    @Component
    public interface StudentClient 
    
         @GetMapping("/stud/getStudentList")
         List<Student> getStudentList(@RequestParam(required = false,name = "name") String name);
    

2.Fallback配置

  • FallBack类

这里有一点需要注意的是@RequestMapping中的value,也就是url,不能与接口类中的url一样。因为一个URL不能映射到两个方法上。

@Component
@RequestMapping("fallback/")
public class  FallBackStudentClient implements StudentOtherClient 

    @Override
    public Student getStudent(String name) 
        Student student = new Student();
        student.setAge(0);
        student.setName("fall back test");
        return student;
    
  • 接口类

    在@FeignClient注解的参数指定Fallback类,且需要@Component注解。

@Component
@FeignClient(name = "$feign.provider",path = "/feignprovider"
        ,fallback = FallBackStudentClient.class)
public interface StudentOtherClient 
    @GetMapping("/stud/getStudent")
    Student getStudent(@RequestParam(required = false, name = "name") String name);

  • 打开Hystrix熔断功能

    在bootstrap.yml中增加Hystrix配置。其中Hystrix的默认time-out时间为1s。

    feign:
      name: MFRAMEWORK-PROVIDER
      provider: feignprovider
    ##开启Hystrix断路器
      hystrix:
        enabled: true

以上就是Figen的Fallback初体验的全部内容了。

demo地址:https://github.com/lanxuan826/sample-library/tree/master/feigndemo-fallback

ps:在测试过程遇到了一个问题,错误内容如图。

原因:多个接口上的@FeignClient(“相同服务名”)会报错,overriding is disabled。

技术图片

解决:

在application.yml中配置:

spring
    main:  allow-bean-definition-overriding: true

以上是关于SpringCloud Feign 之 Fallback初体验的主要内容,如果未能解决你的问题,请参考以下文章

微服务架构SpringCloud之Feign

springcloud之Feign伪装

SpringCloud Feign 之 Fallback初体验

(05)SpringCloud实战之Feign负载均衡

SpringCloud 之Feign服务消费者

SpringCloud之服务调用(feign)