Spring Cloud Alibaba 實戰(六) - 聲明式HTTP客戶端-Feign

本章學習Feign,包括Feign的自定義配置,實現文件上傳,進一步實現代碼的重用,Feign性能優化,Feign與RestTemplate的對比與選擇.

1 使用Feign實現遠程HTTP調用

  • Feign是Netflix開源的聲明式HTTP客戶端

  • 添加依賴

在這裏插入圖片描述

  • 新建包及接口

  • 服務實現類

2 Feign的組成

    • 查找
    1. 默認的Feign : 使用的URLConnection性能差

    1. 和ribbon配合的 : 使用了代理模式,其實也就是feign-default的代理

    1. contract

    由於feign默認的註解是非Spring MVC型的

    • 通過該默認類實現了MVC註解

    細粒度配置自定義

    默認的Feign是不打印日誌的

    • 自定義Feign日誌級別

    下面將設置爲FULL級別

    Java代碼方式 - 指定日誌級別

    • 接口類

    • 日誌配置類
    • 配置文件

    • 注意坑,如果在feign配置類加了該註解,就必須放在compscan包以外,以免複製上下文重複掃描問題

    配置屬性方式 - 指定日誌級別

    將之前的Java配置類的註解註釋掉

    • 配置文件

    全局配置

    Java代碼方式 - 指定日誌級別

    方式一:讓父子上下文ComponentScan重疊(強烈不建議使用)
    ◆ 方式二[唯一正確的途徑] :
    @EnableFeignClients(defaultConfiguration=xxx.class)

    • 先將之前的細粒度配置註釋掉!

    • 找到啓動類的EFC註解並指定爲配置類

    配置屬性方式 - 指定日誌級別

    • 恢復之前的配置文件信息並修改如下

    支持的配置項

    • 代碼方式

    • 屬性方式

    配置最佳實踐總結

    • Ribbon配置 VS Feigne配置

    • Feign代碼方式 VS 屬性方式

    最佳實踐

    • 儘量使用屬性配置,屬性方式實現不了的情況下再考慮用代碼配置
    • 在同一個微服務內儘量保持單一性,比如統一使用屬性配置,不要兩種方式混用,增加定位代碼的複雜性

    Feign的繼承

    • UserCenter中的

    • ContentCenter中的,使其繼承上面的代碼

    關於繼承特性的爭議

    ◆ 官方觀點:不建議使用

    這裏繼承會產生緊耦合

    ◆ 業界觀點:很多公司使用
    比如User服務修改了字段,而Content服務卻不知道,沒有修改,那麼調用時就會報錯
    ◆ 個人觀點:權衡利弊

    此處有爭議,不贅述

    多參數請求構造

    比如在User服務中有這樣一個請求


    那麼如何使用Feign去請求這樣的API呢?

    回到Content服務,寫代碼

    • 寫一測試類

    • 在測試啓動類添加該測試項目

    • 啓動報錯,根據error提示,添加配置,之後正常啓動!

    因爲現在有兩個client都叫user-client(測試類也叫user-client), 重名了,所以Spring創建代理時會有問題,加上上述配置即可解決

    • 但是此刻這樣訪問依舊報錯405
    • Feign端服務代碼, 還需要添加註解

    • 推薦閱讀

    如何使用Feign構造多參數的請求

    Feign脫離Ribbon使用

    在Content服務寫代碼

    • 測試類添加測試項目

    • 直接訪問即可!

    RestTemplate VS Feign

    如何選擇?

    ◆ 原則:儘量用Feign ,杜絕使用RestTemplate
    ◆ 事無絕對,合理選擇

    Feign性能優化

    連接池 [提升15%左右]

    • 添加依賴

    • 配置文件

    使用okhttp同理配置如上兩步驟

    日誌級別

    因爲默認不打印日誌哦!建議設置爲basic,不要爲full哦

    常見問題總結 - 推薦閱讀

    Feign常見問題總結

    現有架構總結

    參考

    本文由博客一文多發平臺 OpenWrite 發佈!
    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章