天天看点

注解-FeignClient详情

一 FeignClient注解

@FeignClient标签的常用属性如下:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FeignClient {
   @AliasFor("name")
   String value() default "";
   
   @AliasFor("value")
   String name() default "";
   /**
    从源码可以得知,name是value的别名,value也是name的别名。两者的作用是一致的,name指定FeignClient的名称,如果项   目使用了Ribbon,name属性会作为微服务的名称,用于服务发现。
   */      

value: 服务名

name:指定FeignClient的名称,注意—》如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现

url: url一般用于调试,可以手动指定@FeignClient调用的地址

fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口

fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码

path: 定义当前FeignClient的统一前缀

contextId:比如我们有个order服务,但order服务中有很多个接口,我们不想将所有的调用接口都定义在一个类中

/**
*《接口A》
*/
@Component
@FeignClient(name = "order", fallback = OrderFeignHystrix.class, contextId = "orderFeignA",path = "/order")
public interface OrderFeignA {

   /**
    * 保存订单信息
    *
    * @param orderInfoDTO
    * @return
    */
   @PostMapping("/create")
   ResponseMessage createOrder(@RequestBody @Valid OrderInfoDTO orderInfoDTO);
/**
*《接口B》
*/
@Component
@FeignClient(name = "order", fallback = OrderFeignHystrix.class, contextId = "orderFeignB",path = "/order")
public interface OrderFeignB {

   /**
    * 保存订单信息
    *
    * @param orderInfoDTO
    * @return
    */
   @PostMapping("/create")
   ResponseMessage createOrder(@RequestBody @Valid OrderInfoDTO orderInfoDTO);      

继续阅读