一 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);