feign的fallback操作
Fallback可以帮助我们在使用Feign去调用另外一个服务时,如果出现了问题,走服务降级,返回一个错误数据,避免功能因为一个服务出现问题,全部失效。
依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
启动类上添加注解:
//开启Feign调用, 扫描feign接口所在包 @EnableFeignClients(basePackages = {"com.xx.feign"})
1。创建一个类,去实现自己的feign接口,并实现里面的方法,并用@Component交给spring管理
例如
/** * 当feign调用出问题了, 会自动执行这里, 防止调用报错中断执行 * 这里都是给feign调用的错误兜底的方法 * 注意: 兜底方法的路径不能和feign接口相同, 因为springMvc不允许同一个访问路径有两个方法 * @author zhaojian */ @Component @RequestMapping("/fallback") public class SearchFeignFallBack implements SearchFeign { @Override public String index() { return "feign调用出问题了"; } @Override public Customer findById(Integer id) { return new Customer(1, "feign调用有问题"); } @Override public Customer findCustomer(Integer id, String name) { return new Customer(1, "feign调用有问题"); } @Override public Customer save(Customer customer) { return new Customer(1, "feign调用有问题"); } }
修改之前自己写的feign接口,在注解中,添加fallback类名.class
例如:
/** * feign接口, FeignClient后面指定被调用微服务的服务名 * @author zhaojian */ @FeignClient(value = "SEARCH", fallback = SearchFeignFallBack.class) @RestController public interface SearchFeign {
这个微服务的配置文件yml添加内容,如下:
server: port: 9001 #指定服务的名称 spring: application: name: CUSTOMER # 指定Eureka服务地址 eureka: client: service-url: defaultZone: http://root:root@localhost:8761/eureka # 指定具体服务的负载均衡策略 SEARCH: ribbon: # 具体负载均衡使用的类 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule feign: hystrix: enabled: true
然后再controller,用feign远程调用出现问题时,会走刚才写的fallback降级方法