SpringCloud Feign的分析

 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达到重写目的

复制代码


                    
                
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信