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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM