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降级方法

posted @ 2021-11-28 20:18  黄大虾  阅读(4891)  评论(0编辑  收藏  举报