一.Hystrix(續(xù))
1.Ribbon整合Hystrix
(1)在Ribbon的工程中废麻,添加Hystrix的依賴
<!-- hystrix 依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
(2)在啟動類上添加注解
@EnableHystrix
(3)在使用RestTemplate的地方宇葱,通過注解實現(xiàn)資源隔離
//使用注解春寿,隔離其他服務(wù)的調(diào)用資源另锋,被該注解標(biāo)記的方法會被Hystrix提供的線程調(diào)用(線程池隔離)
//fallbackMethod就是指定降級方法觉吭,當(dāng)資源不足或者服務(wù)報錯時缝呕,會走降級方法
//熔斷器默認(rèn)已經(jīng)開啟
@HystrixCommand(fallbackMethod = "myFallBack")
@RequestMapping("/queryName")
public String getNameById(Integer sid){
......
}
/**
* 降級方法
* @param sid
* @return
*/
public String myFallBack(Integer sid){
return "服務(wù)異常铝穷,降級方法調(diào)用6仄A底贰!";
}
2.Feign整合Hystrix
(1)直接通過配置yml文件罚屋,開啟Hystrix
#開啟Feign的斷路器功能
feign:
hystrix:
enabled: true
注意:Feign中已經(jīng)整合了Hystrix苦囱,所以不需要添加任何依賴,F(xiàn)eign中的Hystrix功能默認(rèn)關(guān)閉
(2)配置Feign接口脾猛,編寫降級實現(xiàn)類
@FeignClient(value = "MIRCO-TEACHER", fallback = ITeacherFeign.TeacherFeign.class)
public interface ITeacherFeign {
@RequestMapping("/tea/queryTeaName")
String queryTeaName(@RequestParam("tid") Integer tid);
/**
* Feign接口的實現(xiàn)類
*/
@Component
public static class TeacherFeign implements ITeacherFeign{
//就是對應(yīng)的降級方法
@Override
public String queryTeaName(Integer tid) {
return "教師服務(wù)調(diào)用異常撕彤,服務(wù)進(jìn)行降級!C退羹铅!";
}
}
}
3.Hystrix的常用配置-yml文件
#配置Hystrix的常用屬性
hystrix:
command:
default:
execution:
isolation:
#資源隔離的策略,線程池隔離(默認(rèn))漆弄、信號量隔離(SEMAPHORE)
strategy: THREAD
#hystrix超時時間睦裳,默認(rèn)1秒
thread:
timeoutInMilliseconds: 500
timeout:
#是否開啟Hystrix的超時時間, 默認(rèn)為true撼唾,如果設(shè)置為false廉邑,
#意為不超時,但是Feign的超時仍然起作用
enabled: true
#熔斷器的相關(guān)配置倒谷,默認(rèn)打開熔斷器
circuitBreaker:
enabled: true
#單位時間內(nèi)蛛蒙,失敗的次數(shù),如果達(dá)到這個閾值渤愁,那么熔斷器就會打開牵祟,默認(rèn)20次
requestVolumeThreshold: 5
#多久之后,熔斷器進(jìn)入半開狀態(tài)抖格,默認(rèn)5S
sleepWindowInMilliseconds: 5000
注意:實際開發(fā)過程中诺苹,調(diào)用超時,需要結(jié)合Feign的超時和Hystrix的超時雹拄,哪個超時設(shè)置的小收奔,哪個就起作用,默認(rèn)都是1S滓玖。
4.Hystrix的儀表盤(圖形化界面監(jiān)控)
(1)簡介
Hystrix提供了一個組件坪哄,可以監(jiān)控Hystrix的微服務(wù),來動態(tài)掌握各個微服務(wù)之間的請求調(diào)用情況。
(2)配置Hystrix的儀表盤
1)單獨創(chuàng)建一個SPringBoot項目翩肌,作為儀表盤工程
2)該工程添加依賴儀表盤工程
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
3)配置啟動注解儀表盤工程
@EnableHystrixDashboard
4)啟動該工程
5)去到需要監(jiān)控的工程模暗,配置監(jiān)控Servlet
①添加依賴
//添加監(jiān)控依賴
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-metrics-event-stream</artifactId>
<version>1.5.18</version>
<scope>compile</scope>
</dependency>
②配置servlet
//啟動類配置監(jiān)控的Servlet
@Bean
public ServletRegistrationBean<HystrixMetricsStreamServlet> getServlet(){
HystrixMetricsStreamServlet hystrixMetricsStreamServlet
= new HystrixMetricsStreamServlet();
ServletRegistrationBean<HystrixMetricsStreamServlet>
servletRegistrationBean = new ServletRegistrationBean();
servletRegistrationBean.setServlet(hystrixMetricsStreamServlet);
servletRegistrationBean.addUrlMappings("/hystrix.stream");
servletRegistrationBean.setName("HystrixMetricsStreamServlet");
return servletRegistrationBean;
}
6)去到儀表盤工程,配置監(jiān)控地址即可
注意:Hystrix的儀表盤念祭,不需要注冊到注冊中心上兑宇,是一個獨立的工程就可以了
二.路由網(wǎng)關(guān)
1.簡介
簡單來說,路由網(wǎng)關(guān)往往是微服務(wù)架構(gòu)的入口組件棒卷,外來的所有的請求顾孽,都需要通過路由網(wǎng)關(guān)進(jìn)行分發(fā)和過濾。路由網(wǎng)關(guān)的核心功能:請求的路由比规、請求的過濾
2.功能作用
(1)路由網(wǎng)關(guān)提供了外部請求的訪問入口,所有的外部請求都只需要知道路由網(wǎng)關(guān)的地址就行了拦英,無需知道每個微服務(wù)的訪問地址蜒什,路由網(wǎng)關(guān)可以將外部的請求負(fù)載分發(fā)給不同的微服務(wù),這樣可以對外屏蔽微服務(wù)架構(gòu)內(nèi)部的結(jié)構(gòu)疤估。因為路由網(wǎng)關(guān)往往是外部請求訪問微服務(wù)架構(gòu)的入口灾常,所以可以在路由網(wǎng)關(guān)做請求過濾的工作。具體如下圖所示:
(2)SpringCloud默認(rèn)提供了2個路由網(wǎng)關(guān)铃拇,Zuul和Gateway钞瀑,Zuul是網(wǎng)飛(netflix)提供的路由組件,而Gateway是SpringCloud團隊自己開發(fā)的一款路由組件慷荔,用來替換Zuul的
3.路由網(wǎng)關(guān)的請求路由實現(xiàn)--Gateway
(1)創(chuàng)建一個微服務(wù)工程雕什,注意該微服務(wù)工程不能添加web依賴
(2)添加Gateway依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
(3)配置application.yml
server:
port: 18888
spring:
application:
name: gateway-server
#配置路由網(wǎng)關(guān)的路由規(guī)則
cloud:
gateway:
routes:
#id:規(guī)則的標(biāo)識,是一個合法不重復(fù)的字符串即可
- id: guize1
#predicates:路由規(guī)則显晶,什么樣的請求贷岸,匹配當(dāng)前這個規(guī)則
predicates:
# http://localhost:18888/stu/a/b
- Path=/stu/**
#當(dāng)前的規(guī)則,分發(fā)給哪個微服務(wù)
#http://MICRO-STUDENT/stu/a/b
uri: lb://MICRO-STUDENT
eureka:
client:
service-url:
defaultZone: http://localhost:20000/eureka
三.分布式統(tǒng)一配置中心
1.統(tǒng)一配置中心的搭建(服務(wù)端)
(1)創(chuàng)建一個工程(可以不是微服務(wù)磷雇,不用注冊到注冊中心上)
(2)添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
(3)啟動類添加注解
@EnableConfigServer
(4)配置application.yml
server:
port: 40000
spring:
application:
name: config-server
#讀取本地配置文件偿警,強制需要配置該屬性
profiles:
active: native
cloud:
config:
server:
#配置文件放到本地
native:
search-locations: classpath:config
#配置文件放到svn上的配置
# svn:
# uri: #svn倉庫的地址
#配置文件放到git上的配置
# git:
# uri: xxxxxxxx #配git倉庫的地址,git倉庫里放的就是各種配置文件
(5)在config文件夾中唯笙,準(zhǔn)備一個樣例配置文件
com:
name: zhangsan
(6)運行配置中心螟蒸,測試是否能都讀到管理的配置信息
2.微服務(wù)配置的統(tǒng)一管理(其他微服務(wù)的配置全部交由統(tǒng)一配置中心管理)
(1)將所有微服務(wù)的application.yml放到統(tǒng)一配置中心的指定目錄下(git、svn需要傳到指定的倉庫中)
(2)所有微服務(wù)添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
(3)所有的微服務(wù)崩掘,添加一個配置文件bootstrap.yml
注意:bootstrap.yml用法和application.yml的用法完全一致七嫌,但是在SpringBoot啟動過程中,是先加載bootstrap.yml再加載application.yml
spring:
cloud:
config:
#配置統(tǒng)一配置中心的地址
uri: http://localhost:40000
#配置文件的名字
name: teacher
#配置文件的環(huán)境
profile: local
(4)啟動配置中心呢堰、再啟動微服務(wù)
注意:這里有一個強制的順序要求抄瑟,必須先啟動配置中心,再啟動微服務(wù)
3.注意事項
(1)如果配置文件是放在Config Server本地管理的,那么每次修改配置文件皮假,都必須重啟Config Server才會生效
(2)如果配置文件是放在Config Server的git鞋拟、SVN倉庫中管理的,那么每次修改配置文件惹资,不用重啟Config Server贺纲,會自動生效
(3)不管配置文件放在哪里,每次修改配置文件褪测,所有的Config Client(微服務(wù))猴誊,都必須重啟才有效。原因在于Config Client只有在啟動的時候會去抓一次配置侮措,然后配置就緩存到本地了懈叹,后續(xù)所有的代碼都是從本地獲得配置,因此服務(wù)的變化分扎,是無感知的澄成,這也是一種優(yōu)化的結(jié)果
4.關(guān)于配置修改,需要重啟所有微服務(wù)的解決方案
(1)統(tǒng)一配置中心的管理方案一
(2)統(tǒng)一配置中心的管理方案二 升級方案