Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单。我们只需要使用Feign来创建一个接口并用注解来配置它既可完成。
@FeignClient(value = "qrcodepay-dike-service") public interface TestRoute { @RequestMapping(value = "/dike/get", method = RequestMethod.GET) HdResult get(); }
我们只需要在相应的接口上添加@FeignClient注解即可将他声明为一个web客户端。这其中的原理我们后续分析。我们首先先关注下feign暴露的几个配置。
- value: 目标服务名,一般都是 application.name
- fallback : 服务降级策略
@FeignClient(value = "qrcodepay-dike-service",fallback = TestRoute.TestRouteFaback.class)
public interface TestRoute {
@RequestMapping(value = "/dike/get", method = RequestMethod.GET)
HdResult get();
}
@Component class TestRouteFaback implements TestRoute{ @Override public HdResult get() { return HdResult.makeFail("服务降级"); } }
- fallbackFactory :fallback的升级版,可以获取更加详细的异常信息
@FeignClient(value = "qrcodepay-dike-service",fallbackFactory = TestRoute.TestRouteFallbackFactory.class) public interface TestRoute { @RequestMapping(value = "/dike/get", method = RequestMethod.GET) HdResult get(); @Component class TestRouteFallbackFactory implements FallbackFactory<TestRoute>{ private static final Logger logger = LoggerFactory.getLogger(TestRouteFallbackFactory.class); @Override public TestRoute create(Throwable throwable) { String msg = throwable == null ? "" : throwable.getMessage(); if (!StringUtils.isEmpty(msg)) { logger.error("异常信息打印:{}",msg); } return new TestRoute() { @Override public HdResult get() { return HdResult.makeFail(msg); } }; } } }
- configuration:重写feign的配置
具体哪些内容可以配置我们可以看 FeignClientsConfiguration和feign.Feign.Builder。
下面用两种方式重写feign的配置
覆盖原有的配置bean达到重写目的

