springboot負載均衡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。