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