SpringCloud(三)

一.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)啟動該工程

Hystrix顯示頁面

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)控地址即可

監(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)做請求過濾的工作。具體如下圖所示:

路由網(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)一配置中心

統(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ù)


啟動日志.png

注意:這里有一個強制的順序要求抄瑟,必須先啟動配置中心,再啟動微服務(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)一配置中心的管理方案二 升級方案

管理方案二
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畏吓,一起剝皮案震驚了整個濱河市墨状,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌菲饼,老刑警劉巖肾砂,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宏悦,居然都是意外死亡镐确,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門肛根,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辫塌,“玉大人,你說我怎么就攤上這事派哲【拾保” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵芭届,是天一觀的道長储矩。 經(jīng)常有香客問我,道長褂乍,這世上最難降的妖魔是什么持隧? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮逃片,結(jié)果婚禮上屡拨,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好呀狼,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布裂允。 她就那樣靜靜地躺著,像睡著了一般哥艇。 火紅的嫁衣襯著肌膚如雪绝编。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天貌踏,我揣著相機與錄音十饥,去河邊找鬼。 笑死祖乳,一個胖子當(dāng)著我的面吹牛逗堵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播眷昆,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼砸捏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了隙赁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤梆暖,失蹤者是張志新(化名)和其女友劉穎伞访,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轰驳,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡厚掷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了级解。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冒黑。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖勤哗,靈堂內(nèi)的尸體忽然破棺而出抡爹,到底是詐尸還是另有隱情,我是刑警寧澤芒划,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布冬竟,位于F島的核電站,受9級特大地震影響民逼,放射性物質(zhì)發(fā)生泄漏泵殴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一拼苍、第九天 我趴在偏房一處隱蔽的房頂上張望笑诅。 院中可真熱鬧,春花似錦、人聲如沸吆你。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽早处。三九已至湾蔓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砌梆,已是汗流浹背默责。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咸包,地道東北人桃序。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像烂瘫,于是被迫代替她去往敵國和親媒熊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355