<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          SpringCloud 極簡(jiǎn)入門 您所在的位置:網(wǎng)站首頁 屬猴出生最有錢的日子 SpringCloud 極簡(jiǎn)入門

          SpringCloud 極簡(jiǎn)入門

          2023-12-14 12:07| 來源: 網(wǎng)絡(luò)整理| 查看: 265

          前情回顧

          上章節(jié)我們講了消費(fèi)者調(diào)用生產(chǎn)者的兩種方案。

          調(diào)用過程中出現(xiàn)異常或者服務(wù)不可用怎么辦呢?

          管它呢,直接返回給客戶錯(cuò)誤信息....

          這個(gè)?這個(gè)?這樣做貌似不是一個(gè)合格程序員做的事情吧,我們應(yīng)該遵循友好性原則,友情提示下。

          那這就是本篇的主題FeignClient中使用熔斷機(jī)制Hystrix進(jìn)行服務(wù)熔斷友情提示

          小插曲

          說來也慚愧,項(xiàng)目弄了3個(gè)月了剛開始也是集成了熔斷機(jī)制的,可以SpringCloud一升級(jí)發(fā)現(xiàn)不起作用了,也就不用管這塊,突然在整理本章內(nèi)容的時(shí)候,發(fā)現(xiàn)了原因,現(xiàn)在共享給大家,希望有所幫助。(我們時(shí)共同進(jìn)步的機(jī)制,所以有問題在下面發(fā)表你的看法,有問必有答)

          概念掃盲

          在微服務(wù)架構(gòu)中,根據(jù)業(yè)務(wù)來拆分成一個(gè)個(gè)的服務(wù),服務(wù)與服務(wù)之間可以相互調(diào)用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign來調(diào)用。為了保證其高可用,單個(gè)服務(wù)通常會(huì)集群部署。由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證100%可用,如果單個(gè)服務(wù)出現(xiàn)問題,調(diào)用這個(gè)服務(wù)就會(huì)出現(xiàn)線程阻塞,此時(shí)若有大量的請(qǐng)求涌入,Servlet容器的線程資源會(huì)被消耗完畢,導(dǎo)致服務(wù)癱瘓。服務(wù)與服務(wù)之間的依賴性,故障會(huì)傳播,會(huì)對(duì)整個(gè)微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果,這就是服務(wù)故障的“雪崩”效應(yīng)。為了解決這個(gè)問題,業(yè)界提出了斷路器模型。

          Netflix開源了Hystrix組件,實(shí)現(xiàn)了斷路器模式,SpringCloud對(duì)這一組件進(jìn)行了整合。 在微服務(wù)架構(gòu)中,一個(gè)請(qǐng)求需要調(diào)用多個(gè)服務(wù)是非常常見的

          來張圖

          Demo開始

          強(qiáng)大的springcloud-01-eureka-producer-consumer模塊,沒錯(cuò),本章內(nèi)容還是以這個(gè)模塊為demo,已經(jīng)很多章節(jié)都是以此模塊講解了,是不是有必要下載下源碼呢?(文末共享)

          以下代碼在消費(fèi)者spring-cloud-consumer添加

          首先是pom引入(和上章節(jié)一樣,木變化)

          我們用的是spring-cloud-starter-openfeign核心包

          org.springframework.cloud spring-cloud-starter-openfeign org.springframework.cloud spring-cloud-starter-netflix-eureka-client 接下就是Service層了

          看看和上篇有哪些變化

          @FeignClient(name= "spring-cloud-provider",fallbackFactory = HelloServiceFallbackFactory.class) public interface HelloService { @RequestMapping(value = "hello") public String hello(@RequestParam(value = "name") String name); }

          發(fā)現(xiàn)有什么不同了嗎?沒錯(cuò)的,相信已經(jīng)看到了,就這么簡(jiǎn)單加上fallbackFactory即可

          fallbackFactory = HelloServiceFallbackFactory.class

          然后HelloServiceFallbackFactory?實(shí)現(xiàn)FallbackFactory接口就ok了

          HelloServiceFallbackFactory 類 @Component public class HelloServiceFallbackFactory implements FallbackFactory { @Override public HelloService create(Throwable throwable) { return new HelloService() { @Override public String hello(String name) { return "連接超時(shí),稍后重試"; } }; } }

          注意點(diǎn):加上注解@Component 不要忘記? ?;然后實(shí)現(xiàn)每個(gè)方法的返回值就ok了

          啟動(dòng)類? (也很關(guān)鍵) @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients //1.支持Hystrix和他的fallback 2.支持ribbon 的負(fù)載均衡 3.啟動(dòng)時(shí)會(huì)進(jìn)行包掃描,掃描所有帶@FeignClient的類并進(jìn)行處理 public class SpringCloudConsumerApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudConsumerApplication.class, args); System.out.println("/*************spring cloud consumer 9001********************/"); } }

          對(duì)的只需要加上@EnableFeignClients即可,但是這邊有幾個(gè)知識(shí)點(diǎn),一定要要牢記,EnableFeignClients功能

          1.支持Hystrix和他的fallback

          ?2.支持ribbon 的負(fù)載均衡 ?

          3.啟動(dòng)時(shí)會(huì)進(jìn)行包掃

          Controller層

          結(jié)束,為了本章完整性,在加一下controller吧(和上章木有變化)

          啟動(dòng)項(xiàng)目開始測(cè)試

          測(cè)試?

          訪問controller結(jié)果返回,正確,收工?

          這就測(cè)試完成了?我們還忘了配置文件的配置吧,不是忘記了,是因?yàn)樘匾耍覀兎旁谶@里講解

          配置文件(最后幾項(xiàng)) spring.application.name=spring-cloud-consumer server.port=9001 eureka.client.serviceUrl.defaultZone=http://localhost:7001/eureka/ #開啟熔斷 feign.hystrix.enabled=true #是否開啟超時(shí)熔斷, 如果為false,?則熔斷機(jī)制只在服務(wù)不可用時(shí)開啟 hystrix.command.default.execution.timeout.enabled=true #?設(shè)置超時(shí)熔斷時(shí)間 hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000

          測(cè)試流程:關(guān)閉掉spring-cloud-provider模塊的生產(chǎn)者,此時(shí)是沒有服務(wù)的,消費(fèi)者者訪問理應(yīng)觸發(fā)熔斷機(jī)制。

          一:我們要是不開啟熔斷feign.hystrix.enabled,會(huì)有什么效果呢(如下圖,還是會(huì)報(bào)錯(cuò)的,熔斷沒起作用)

          二:feign.hystrix.enabled=true開啟后

          ?

          結(jié)論:熔斷生效

          至于最后熔斷超時(shí)設(shè)置,驗(yàn)證就很簡(jiǎn)單了(啟動(dòng)消費(fèi)者在生產(chǎn)者打上斷點(diǎn),消費(fèi)者自然就超時(shí)了)

          未打斷點(diǎn)返回?cái)?shù)據(jù):hello spring-cloud zhangsan1

          開始打斷點(diǎn):

          打上之后返回:連接超時(shí),稍后重試?

          結(jié)論:超時(shí)設(shè)置生效

          End

          案例很簡(jiǎn)單,要學(xué)會(huì)動(dòng)手實(shí)踐,SpringCloud極簡(jiǎn)入門系列文章結(jié)束后,即將開啟高級(jí)架構(gòu)實(shí)戰(zhàn)篇?dú)g迎轉(zhuǎn)發(fā)關(guān)注

          有問題可隨時(shí)@架構(gòu)師速成記

          源碼:https://github.com/shinians/springcloud-demos



          【本文地址】

          公司簡(jiǎn)介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 建平县| 剑川县| 宝山区| 建始县| 读书| 邵武市| 合山市| 巫山县| 什邡市| 安陆市| 汨罗市| 九江县| 运城市| 开阳县| 滕州市| 五大连池市| 勐海县| 南阳市| 新河县| 惠州市| 宁波市| 安顺市| 柯坪县| 获嘉县| 改则县| 虹口区| 玉山县| 夹江县| 尼勒克县| 高要市| 衡南县| 留坝县| 时尚| 贡嘎县| 浏阳市| 方正县| 怀仁县| 乌兰浩特市| 五大连池市| 元江| 察雅县| http://444 http://444 http://444 http://444 http://444 http://444