SpringCloud學習記錄——Feign客戶端負載均衡及Hystrix斷路器
1、搭建service-feign服務呼叫multipl(兩個節點提供),實現客戶端負載均衡效果。
新建maven module,命名為micro-service-feign,父專案指向micro,打包方式選擇jar,新建方式選擇“maven-archetype-webapp”。
pom.xml引入SpringBoot基礎包、spring-cloud-starter-eureka、javax.servlet-api、,pom.xml依賴包匯入:
在src/main/java目錄下新建com.xiudoua.study.micro包,在此包下新建一個FeignApplication.java類,其中@SpringBootApplication代表此專案為SpringBoot工程,@EnableDiscoveryClient標註此微服務可被註冊中心發現,@EnableFeignClients為註解此微服務可以通過Feign客戶端負載均衡的方式呼叫其他微服務,程式碼如圖:
在src/main/java目錄下新建com.xiudoua.study.micro.client包,在此包新建MultiplFeignClient介面,用於指向客戶端負載均衡呼叫的微服務(指向微服務serviceId),程式碼如圖:
在src/main/java目錄下新建com.xiudoua.study.micro.controller包,在此包新建FeignController類,此類提供通過Fegin方式呼叫multipl服務的微服務,程式碼如圖:
在src/main/resources目錄下新建application.properties檔案(此處可新建application.properties或者application.yml檔案做配置均可),檔案結構如下:
#標註服務名稱 spring.application.name=feign #標註服務埠號 server.port=8087 #配置指向Eureka註冊中心的地址 eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka/ #顯示註冊客戶端主機和埠號 spring.cloud.client.ipAddres=http://localhost/ eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${spring.application.name}:${spring.application.instance_id:${server.port}} eureka.instance.preferIpAddress=true
分別將Eureka打包jar(eureka.jar)、將service-multipl打包為jar(multipl.jar)、將本節service-feign打包jar(feign.jar),儲存到E:/jar/0404/feign資料夾下,如下圖所示:
複製一份multipl.jar命名為multipl2.jar,用360壓縮工具開啟multipl2.jar(圖6),將壓縮包中BOOT-INF/classes目錄下的application.properties檔案拽出來放到當前目錄,修改原來埠號為8084為8085(圖7),將修改後的application.properties檔案覆蓋multipl2.jar中BOOT-INF/classes目錄下的application.properties檔案。
圖6
圖7
開啟dos視窗,切換到E:/jar/0404/feigin目錄,分別啟動eureka.jar、multipl.jar、multipl2.jar、feign.jar,訪問http://localhost:8080/eurekaUI,訪問結果如下圖示:
訪問http://localhost:8087/multiplyTwoNum?a=23&b=21,如果頁面隨機返回”訪問主機:http://localhost/ 埠:8084 計算結果為:483“、”訪問主機:http://localhost/ 埠:8085 計算結果為:483“即代表此乘法計算服務隨機由8084或8085埠的微服務提供,客戶端負載均衡效果實現。
2、搭建service-feign-hystrix服務呼叫multipl(兩個節點提供),實現客戶端負載均衡及斷路效果。
注:所謂斷路效果,就是指如果微服務掛了不會一直等待後續請求,浪費CPU資源,並且及時返回錯誤訊息,深入瞭解請點選這兒。
參照步驟1的service-feign專案,新建maven module,專案名為service-feign-hystrix,pom.xml檔案相較於步驟1多引入
spring-cloud-starter-hystrix,如下圖:
服務啟動類新增@EnableCircuitBreaker註解,標註此微服務支援斷路效果。
在com.xiudoua.study.micro.client包新建HystrixClientFallback類,實現自定義MultiplFeignHystrixClient介面的multiplyTwoNum方法,並在方法返回列印“斷路器效果成功”字樣。程式碼如下圖:
原有MultiplFeignClient介面改為MultiplFeignHystrixClient,程式碼如下:
application.properties配置如下:
#標註服務名稱
spring.application.name=feign-hystrix
#標註服務埠號
server.port=8088
#配置指向Eureka註冊中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka/
#顯示註冊客戶端主機和埠號
spring.cloud.client.ipAddres=http://localhost/
eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${spring.application.name}:${spring.application.instance_id:${server.port}}
eureka.instance.preferIpAddress=true
打包eureka.jar、multipl.jar、feign-hystrix.jar,分別通過dos以java -jar ***.jar的方式將三個微服務啟動,訪問http://localhost:8088/multiplyTwoNum?a=23&b=21,如果有正常計算結果返回則代表服務均啟動成功;此時關閉multipl服務,再次訪問http://localhost:8087/multiplyTwoNum?a=23&b=21,如果頁面返回“斷路器效果成功!”,則代表微服務斷路器配置成功。