spring boot負載均衡Feign


git地址
https://github.com/a18792721831/studySpringCloud

1. 創建 Feign

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2. 配置gradle

在這裏插入圖片描述

repositories {
    maven{
        url 'https://maven.aliyun.com/'
    }
    maven{
        url 'http://maven.aliyun.com/nexus/content/groups/public/'
    }
    maven{
        url 'https://repo1.maven.org/maven2/'
    }
    mavenCentral()
}

3. Feign配置

在這裏插入圖片描述

server:
  port: 8000

eureka:
  client:
#    register-with-eureka: false
#    fetch-registry: false
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka/


logging:
  level:
    org:
      springframework:
        web:
          servlet:
            mvc:
              method:
                annotation:
                  RequestMappingHandlerMapping: trace

spring:
  freemarker:
    template-loader-path: classpath:/templates/
    prefer-file-system-access: false
  application:
    name: eureka-feign-client

4. 開啓Feign

在SpringbootfeignApplication類增加註解
EnableFeignClients–開啓Feign
EnableEurekaClient–開啓Eureka
在這裏插入圖片描述

5. 創建Feign配置

在這裏插入圖片描述

6. 創建FeignDao

在這裏插入圖片描述
其中,
EUREKA-CLIENT表示eureka-client服務提供者的服務名字
FeignConfig.class指定Feign的配置
注意:
1.這是接口
2.GetMapping中是Eureka-client服務提供者暴露的接口的url請求地址
說明:
我個人比較喜歡將Feign定位於Dao層,當然Service層也可。

7. 創建FeignService

在這裏插入圖片描述

8. 創建FeignController

在這裏插入圖片描述

9. 啓動&驗證

首先啓動eureka-server
接着啓動eureka-client服務提供者(多實例啓動)
最後啓動feign-client服務消費者
全部啓動後是5個實例
在這裏插入圖片描述
訪問eureka-server的主面板
在這裏插入圖片描述
接着驗證eureka-client服務提供者的接口
在這裏插入圖片描述
然後請求feign的接口
在這裏插入圖片描述
在這裏插入圖片描述
發現其效果與Ribbon一致,都是輪詢訪問的。

10. Feign與Ribbon的關係

在這裏插入圖片描述
從github看,Feign維護很好,Issues處理比較及時。
而且從readme中看,feign的計劃什麼的都有,且分短期、中期和長期計劃
在這裏插入圖片描述
而且給的例子也很多。贊。

從Feign的jar包依賴看
在這裏插入圖片描述
其依賴了ribbon.
對於Feign有書上是這樣介紹的

Feign 受 Retrofit、JAXRS-2.0 和 WebSocket 的影響,採用了聲明式 API 接口的風格,將Java Http 客戶端綁定到它的內部。Feign 的首要目標是將JavaHttp客戶端調用過程變得簡單。Feign 的源碼地址:https://github.com/OpenFeign/feign.

所以可以看到Feign的重點應該不是實現與Ribbon相同的功能,而是在Ribbon的基礎上開發新的功能的。

11. FeignClient

我們在FeignDao上加上FeignClient註解的
在這裏插入圖片描述
註解的屬性:
在這裏插入圖片描述
看到了與Ribbon有關的包
在這裏插入圖片描述

  • FeignClient 註解被@Target(ElementType.TYPE)修飾,表示 FeignClient 註解的作用目標在接口上。
  • @Retention(RetentionPolicv.RUNITINF)註解表明該註解會在Class字節碼文件中存在,在運行時可以通過反射獲取到。
  • @Documented 表示該註解將被包含在 Javadoc中。
  • @FeignClient 註解用於創建聲明式API接口,該接口是RESTful風格的。Feign被設計成插拔式的,可以注入其他組件和Feign一起使用。最典型的是如果Ribbon可用,Feign會和Ribbon 相結合進行負載均衡。
  • value()和 name()一樣,是被調用的服務的ServiceId。
  • url()直接填寫硬編碼的Url 地址。
  • decode404即404是被解碼,還是拋異常。
  • configuration()指明FeignClient的配置類,默認的配置類爲FeignClientsConfiguration類,在缺省的情況下,這個類注入了默認的 Decoder、Encoder 和 Contract 等配置的 Bean。
  • fallback()爲配置熔斷器的處理類。

12. FeignClient配置

Feign Client 默認的配置類爲 FeignClientsConfiguration,這個類在 spring-cloud-netflix-core的jar包下。
在這裏插入圖片描述
打開這個類,可以發現這個類注入了很多Feign相關的配置Bean,包括FeignRetryer、FeignLoggerFactory 和FormattingConversionService 等。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
另外,Decoder、Encoder 和 Contract這3個類在沒有Bean被注入的情況下,會自動注入默認配置的Bean,即ResponseEntityDecoder、SpringEncoder 和 SpringMvcContract。
在這裏插入圖片描述

默認注入的配置如下。

  • Decoder feignDecoder:ResponseEntityDecoder。
  • Encoder feignEncoder:SpringEncoder
  • Logger feignLogger:SIf4jLogger。
  • Contract feignContract:SpringMvcContract。
  • Feign.Builder feignBuilder:HystrixFeign.Builder。
  • FcignClientsConfiguration 的配置類部分代碼如下,
  • @ConditionalOnMissingBean 註解表示如果沒有注入該類的Bean就會默認注入一個Bean。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章