前面我們學(xué)習(xí)了使用Ribbon缠俺,大大簡化了遠(yuǎn)程調(diào)用時(shí)的代碼
# ribbon遠(yuǎn)程調(diào)用服務(wù)
restTemplate.getForObject("http://eureka-client-user/hello", String.class);
我們思考下攒发,還有沒有更優(yōu)雅的方式呢在刺?
這就是我們接下來要學(xué)習(xí)的Feign逆害。
Feign簡介
feign的中文翻譯是假裝、偽裝的意思蚣驼。
它可以把Rest請(qǐng)求進(jìn)行隱藏魄幕,偽裝成類似SpringMVC的Controller一樣,讓你可以不用拼接url颖杏,這些Feign都幫你來完成纯陨。
快速入門
- 依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
- Feign客戶端
/**
* @FeignClient: 聲明這是一個(gè)Feign客戶端
* value : 指定服務(wù)名稱
* fallback : 熔斷錯(cuò)誤處理類
* 接口中的定義方法,完全采用SpringMVC的注解留储,F(xiàn)eign會(huì)根據(jù)注解幫我們生成URL翼抠,并訪問獲取結(jié)果
*/
@FeignClient(value = "eureka-client-user", fallback = UserFeignClientFallback.class)
public interface UserFeignClient {
@GetMapping("/hello")
String hello();
}
- 開啟Feign
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignApplication {
public static void main(String[] args) {
SpringApplication.run(FeignApplication.class, args);
}
}
- 開啟Hystix熔斷
默認(rèn)Feign集成了Hystix
feign:
hystrix:
enabled: true # 開啟Feign的熔斷功能
# fallback處理類
@Component
public class UserFeignClientFallback implements UserFeignClient {
@Override
public String hello() {
return "error";
}
}
- Ribbon負(fù)載均衡
Feign中本身已經(jīng)集成了Ribbon依賴和自動(dòng)配置,我們不需要引用額外的配置获讳,也不需要注冊(cè)RestTemplate對(duì)象阴颖。
我們也可以自定義區(qū)配置Ribbon
eureka-client-user:
ribbon:
ConnectTimeout: 250 # 連接超時(shí)時(shí)間(ms)
ReadTimeout: 1000 # 通信超時(shí)時(shí)間(ms)
OkToRetryOnAllOperations: true # 是否對(duì)所有操作重試
MaxAutoRetriesNextServer: 1 # 同一服務(wù)不同實(shí)例的重試次數(shù)
MaxAutoRetries: 1 # 同一實(shí)例的重試次數(shù)
到這里就配置好了,可以測試了丐膝。
Feign的其他功能(了解)
- 請(qǐng)求壓縮
Spring Cloud Feign 支持對(duì)請(qǐng)求和響應(yīng)進(jìn)行GZIP壓縮量愧,以減少通信過程中的性能損耗。通過下面的參數(shù)即可開啟請(qǐng)求與響應(yīng)的壓縮功能
feign:
compression:
request:
enabled: true # 開啟請(qǐng)求壓縮
response:
enabled: true # 開啟響應(yīng)壓縮
同時(shí)帅矗,我們也可以對(duì)請(qǐng)求的數(shù)據(jù)類型偎肃,以及觸發(fā)壓縮的大小下限進(jìn)行設(shè)置
feign:
compression:
request:
enabled: true # 開啟請(qǐng)求壓縮
mime-types: text/html,application/xml,application/json # 設(shè)置壓縮的數(shù)據(jù)類型
min-request-size: 2048 # 設(shè)置觸發(fā)壓縮的大小下限
- 日志級(jí)別
通過logging.level.xx=debug來設(shè)置日志級(jí)別。然而這個(gè)對(duì)Fegin客戶端而言不會(huì)產(chǎn)生效果损晤。因?yàn)锧FeignClient注解修改的客戶端在被代理時(shí)软棺,都會(huì)創(chuàng)建一個(gè)新的Fegin.Logger實(shí)例。我們需要額外指定這個(gè)日志的級(jí)別才可以