一:概述
上節說過,Feign完美的整合了Ribbon和Hystrix,即Feign可以無縫對接的進行客戶端負載均衡以及熔斷器作用。
Feign是一個聲明式的Web Service客戶端,它的目的就是讓Web Service調用更加簡單。Feign還提供了HTTP請求的模板,通過編寫簡單的接口和插入註解,我們就可以定義好HTTP請求的參數、格式、地址等信息。
二:原理
1.通過@EnableFeignCleints註解開啟FeignCleint
2.根據Feign的規則實現接口,並加@FeignCleint註解,來綁定該接口對應服務
3.程序啟動後,會進行包掃描,掃描所有的@ FeignCleint的註解的類,並將這些信息注入IOC容器中。
4.當接口的方法被調用,通過jdk的代理,來生成具體的RequesTemplate,RequesTemplate再生成Request
5.Request交給Client去處理,其中Client可以是HttpUrlConnection、HttpClient
6.最後Client被封裝到LoadBalanceClient類,這個類結合類Ribbon做到了負載均衡。
三:項目的構建
結合之前的Eureka Server以及Eureka Provider項目。Feign項目如下,
3.1:pom.xml配置:
<dependency>
<groupid>org.springframework.cloud/<groupid>
<artifactid>spring-cloud-starter-feign/<artifactid>
3.2:application.properties
#應用名稱
spring.application.name=feign-consumer
#端口號
server.port=8766
#註冊中心地址
eureka.client.serviceUrl.defaultZone=http://eureka:123456@localhost:8761/eureka/
#忽略安全認證
management.security.enabled=false
3.3:入口程序
@EnableDiscoveryClient //啟動服務發現
@EnableFeignClients //開啟Feign功能
@SpringBootApplication
public class FeignConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(FeignConsumerApplication.class, args);
}
}
3.4:新建一個API的依賴
@FeignClient(name = "eureka-provider", fallback ConsumerFallback.class)
public interface RemoteClient {
@RequestMapping(value = "/index")
String index();
}
說明:上述我們定義了一個遠程調用API的接口,註解@FeignClient,Ribbon自動被應用,定義服務提供者的name,以及熔斷器類:ConsumerFallback.class
3.5:新建熔斷器ConsumerFallback
@Component
public class ConsumerFallback implements RemoteClient {
@Override
public String index() {
return "Feign客戶端訪問失敗!";
}
}
注意:注入@Component
3.6:啟動Feign項目
查看Eureka Server服務註冊是否成功
訪問消費者Feign項目API
3.7:終止服務提供者Eureka Provider的項目
我們可以看到,熔斷起了作用。
3.8:客戶端負載均衡
參考Ribbon那節內容
3.9:Hystrix的儀表盤
pom.xml新增依賴
<dependency>
<groupid>org.springframework.cloud/<groupid>
<artifactid>spring-cloud-starter-hystrix/<artifactid>
<dependency>
<groupid>org.springframework.cloud/<groupid>
<artifactid>spring-cloud-starter-hystrix-dashboard/<artifactid>
入口程序新增註解@EnableHystrixDashboard
@EnableDiscoveryClient //啟動服務發現
@EnableFeignClients //開啟Feign功能
@SpringBootApplication
@EnableCircuitBreaker
@EnableHystrixDashboard //開啟Hystrix儀表盤
public class FeignConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(FeignConsumerApplication.class, args);
}
}
點擊Monitor Stream進入儀表盤監控界面,可以查看相關熔斷信息
閱讀更多 nicky猿 的文章