天天看點

注解-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);      

繼續閱讀