十次服務(wù)開發(fā)v1.第8章_第1頁(yè)
十次服務(wù)開發(fā)v1.第8章_第2頁(yè)
十次服務(wù)開發(fā)v1.第8章_第3頁(yè)
十次服務(wù)開發(fā)v1.第8章_第4頁(yè)
十次服務(wù)開發(fā)v1.第8章_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第8章-SpringCloud學(xué)習(xí)目標(biāo)熔斷器在微服務(wù)架構(gòu)中通常會(huì)有多個(gè)服務(wù)層調(diào)用,基礎(chǔ)服務(wù)的故障可能會(huì)導(dǎo)致級(jí)聯(lián)故障,進(jìn)而造成整個(gè)系統(tǒng)不可用的情況,這種現(xiàn)象被稱為服務(wù)雪崩效應(yīng)。服務(wù)雪崩效應(yīng)是一種因“服務(wù)提供者”的不可用導(dǎo)致“服務(wù)消費(fèi)者”的不可用并將不可用逐漸放大的過程。如果下圖所示:A作為服務(wù)提供者,B為A的服務(wù)消費(fèi)者,C和D是B的服務(wù)消費(fèi)者。A不可用引起了B的不可用,并將不可用像滾雪球一樣放大到C和D時(shí),雪崩效應(yīng)就形成了如何避免產(chǎn)生這種雪崩效應(yīng)呢?我們可以使用Hystrix來(lái)實(shí)現(xiàn)熔斷器什么是 [h?st'r?ks]的中文含義是豪豬,因其背上長(zhǎng)滿了刺,而擁有自我保Hsix能使你的系統(tǒng)在出現(xiàn)依賴服務(wù)失效的時(shí)候,通過系統(tǒng)所依賴的服務(wù),防止服務(wù)級(jí)聯(lián)失敗,同時(shí)提供失敗回退機(jī)制,更優(yōu)雅地應(yīng)對(duì)失效,并使你的系統(tǒng)能更快地從異常中恢復(fù)。了解熔斷器模式請(qǐng)看下 本身支持Hystrix,不需要額外引入依修改tensquare_qa模塊的application.yml,開啟在com.tensquare.qa.client包下創(chuàng)建impl包,包下創(chuàng)建熔斷實(shí)現(xiàn)類,實(shí)現(xiàn)自publicclassLabelClientImplimplementsLabelClientpublicResultfindById(Stringid)returnnewResult(falseStatusCode.ERROR,"熔斷器啟動(dòng)了}}修改LabelClient的注@FeignClient@FeignClient(value="tensquare‐base",fallback=測(cè)試運(yùn)重新啟動(dòng)問答微服務(wù),測(cè)試看熔斷器是否微服務(wù)網(wǎng)關(guān)不同的微服務(wù)一般有不同的網(wǎng)絡(luò)地址,而外部的客戶端可能需要調(diào)用多個(gè)服務(wù)的接口才能完成一個(gè)業(yè)務(wù)需求。比如一個(gè)購(gòu)票的收集APP,可能回調(diào)用分類微服務(wù),用戶微服務(wù),支付微服務(wù)等。如果客戶端直接和微服務(wù)進(jìn)行通信,會(huì)存在一下問題:#客戶端會(huì)多次請(qǐng)求不同微服務(wù),增加客戶端的復(fù)#存在跨域請(qǐng)求,在一定場(chǎng)景下處理相對(duì)#認(rèn)證復(fù)雜,每一個(gè)服務(wù)都需要獨(dú)立難以重構(gòu),隨著項(xiàng)目的迭代,可能需要重新劃分微服務(wù),如果客戶端直接和微服務(wù)通 某些微服務(wù)可能使用了其他協(xié)議,直接有一什么是Zul是Netlix開源的微服務(wù)網(wǎng)關(guān),他可以和Erk,Rio,Hytrix等組件配合使用。Zul組件的是一系列的過濾器,這些過濾器可以完成以下功能:#認(rèn)證和安全:識(shí)別每一個(gè)資源的驗(yàn)證要求,并那些不符的請(qǐng)#與##動(dòng)態(tài)路由:動(dòng)態(tài)將請(qǐng)求路由到不同后端#壓力測(cè)試:逐漸增加指向集群的流量,以了解 負(fù)載分配:為每一種負(fù)載類型分配對(duì)應(yīng)容量,并棄用超出限定值的 靜態(tài)響應(yīng)處理:邊緣位置進(jìn)行響應(yīng),避免轉(zhuǎn)發(fā)到內(nèi)部多區(qū)域彈性:跨域AWSRegion進(jìn)行請(qǐng)求路由,旨在實(shí)現(xiàn)ELB(ElasticLoadBalancing)使SpringCloud對(duì)Zuul進(jìn)行了整合和增強(qiáng)。管理微服務(wù)網(wǎng)創(chuàng)建子模塊tensquare_manager,pom.xml引入eureka-client和zuul創(chuàng)建nametensquare‐managerserviceUrlEureka客戶端與Eurekaroutes:tensquare‐gathering:pathgathering/**配置請(qǐng)求URLserviceId:tensquare‐gathering#指定 中心中的服務(wù)tensquare‐articlepatharticle/**配置請(qǐng)求URLserviceId:tensquare‐article#指定 中心中的服務(wù)tensquare‐basepathbase/**配置請(qǐng)求URLserviceId:tensquare‐base#指定 中心中的服務(wù)tensquare‐friendpathfriend/**配置請(qǐng)求URLserviceId:tensquare‐friend#指定 中心中的服務(wù)tensquare‐qapathqa/**配置請(qǐng)求URLserviceId:tensquare‐qa#指定 中心中的服務(wù)tensquare‐recruitpathrecruit/**配置請(qǐng)求URLserviceId:tensquare‐recruit#指定 中心中的服務(wù)tensquare‐spitpathspit/**配置請(qǐng)求URLserviceId:tensquare‐spit#指定 中心中的服務(wù)tensquare‐userpathuser/**配置請(qǐng)求URLserviceId:tensquare‐user#指定 中心中的服務(wù)編寫啟動(dòng)publicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}前臺(tái)的微服務(wù)創(chuàng)建子模塊tensquare_web,pom.xml引入依賴創(chuàng)建nametensquare‐web指定服務(wù)名serviceUrlEureka客戶端與Eureka服務(wù)端進(jìn)行交互的地址routes:tensquare‐gathering:pathgathering/**配置請(qǐng)求URLserviceId:tensquare‐gathering#指定 中心中的服務(wù)tensquare‐articlepatharticle/**配置請(qǐng)求URLserviceId:tensquare‐article#指定 中心中的服務(wù)tensquare‐basepathbase/**配置請(qǐng)求URLserviceId:tensquare‐base#指定 中心中的服務(wù)tensquare‐friendpathfriend/**配置請(qǐng)求URLserviceId:tensquare‐friend#指定 中心中的服務(wù)tensquare‐qapathqa/**配置請(qǐng)求URLserviceId:tensquare‐qa#指定 中心中的服務(wù)tensquare‐recruitpathrecruit/**配置請(qǐng)求URLserviceId:tensquare‐recruit#指定 中心中的服務(wù)tensquare‐spitpathspit/**配置請(qǐng)求URLserviceId:tensquare‐spit#指定 中心中的服務(wù)tensquare‐userpathuser/**配置請(qǐng)求URLserviceId:tensquare‐user#指定 中心中的服務(wù)tensquare‐searchpathsearch/**配置請(qǐng)求URLserviceId:tensquare‐search#指定 中心中的服務(wù)編寫啟動(dòng)publicclassWebApplicationpublicstaticvoidmain(String[]args){}}Zuul過濾器快速我們現(xiàn)在在 創(chuàng)建一個(gè)簡(jiǎn)單的zuul過濾publicclassWebFilterextendsZuulFilterpublicStringfilterType(){return"pre";前置過濾器}publicintfilterOrder()return0;優(yōu)先級(jí)為0}publicbooleanshouldFilter()returntrue;是否執(zhí)行該過濾器,此處為true}publicObjectrun()throwsreturnnull;}}啟動(dòng)tensquare_web會(huì)發(fā)現(xiàn)過濾器已經(jīng)filterType:返回一個(gè)字符串代表過濾器的類型,在zuul中定義了四種不同生命周期的過pre:可以在請(qǐng)求被路由之前route:在路由請(qǐng)求時(shí)候被post:在route和error過濾器之后被調(diào)error:處理請(qǐng)求時(shí)發(fā)生錯(cuò)誤時(shí)被:通過int值來(lái)定義過濾器的執(zhí)行實(shí)現(xiàn)過濾器的開關(guān)。在上例中,我們直接返回true,所以該過濾器總是生效:過濾器的具體邏輯前臺(tái)的token轉(zhuǎn)我們現(xiàn)在在過濾器中接收header,轉(zhuǎn)發(fā)給微服修改tensquare_web的過濾器。如果有token,直接轉(zhuǎn)發(fā)publicObjectrunthrowsZuulException{ ontextreq ontext= HttpServletRequestrequest=req Stringauthorization=request.getHeader("Authorization");}return}管理過濾器實(shí)現(xiàn)token校 因?yàn)槭枪芾硎褂?,所以需要在過濾器中對(duì)token 修改tensquare_manager配置文件修改tensquare_manager的啟動(dòng)類,添加publicjwtUtil(){returnnewtensquare_manager編寫過濾器publicclassManagerFilterextendsZuulFilterprivateJwtUtilpublicStringfilterType過濾器類型return"pre";//前置過濾器}publicintfilterOrder()return0;//}publicbooleanshouldFilter()returntrue;//過濾器開關(guān),true}publicObjectrunthrowsZuulException ontextreq HttpServletRequestrequest=req returnnull;}StringauthHeaderif(authHeader!=null&&authHeader.startsWith("Bearer")){Stringtoken=authHeader.substring(7);Claimsclaims=jwtUtil.parseJWT(token);息return}}} return}}需要注意,這里我們通過ctx.se dZuulResponse(false)令zuul過濾該請(qǐng)求,不對(duì)其進(jìn)行路由,然后通過ctx.setResponseStatusCode(401)設(shè)置了其返回的錯(cuò)誤碼集中配置組件以需要分布式配置中心組件。在SpringCloud中,有分布式配置中心組件springcloudconfig,它支持配置服務(wù)放在配置服務(wù)的內(nèi)存中(即本地),也支持放在Git倉(cāng)庫(kù)中。在springcloudconfig組件中,分兩個(gè)角色,一是configserver,二是configConfigServer是一個(gè)可橫向擴(kuò)展、集中式的配置服務(wù)器,它用于集中管理應(yīng)用程序各個(gè)環(huán)境下的配置,默認(rèn)使用Git配置文件內(nèi)容,也可以使用SVN,或者是本地文件ConfigClient是ConfigServer的客戶端,用于操作在ConfigServer中的配置內(nèi)容。微服務(wù)在啟動(dòng)時(shí)會(huì)請(qǐng)求ConfigServer獲取配置文件的內(nèi)容,請(qǐng)求到后再啟動(dòng)容器。詳細(xì)內(nèi)容看文檔將配置文件提交到使用時(shí),國(guó)內(nèi)的用戶經(jīng)常遇到的問題是速度太慢,有時(shí)候還會(huì)出現(xiàn)無(wú)法連接 ) 步驟瀏覽器打 ,用戶,后登陸碼云管理控制創(chuàng)建項(xiàng)目tensquare- (點(diǎn)擊右上角的加號(hào),下拉菜單選擇創(chuàng)建項(xiàng)目上傳配置文件,將tsrsi.l改名為vyl后可以通過拖拽的方式將文件上傳上傳成功后列表可可以再次編輯此文文件命名規(guī)則{application}-{profile}.yml或{applicationapplication為應(yīng)用名稱profile指的開發(fā)環(huán)境(用于區(qū)分開發(fā)環(huán)境,測(cè)試環(huán)境、生產(chǎn)環(huán)境git地址,備地址為 /chuanzhiliubei/tensquare-配置中心微創(chuàng)建工程模塊服務(wù)tensquare_config,pom.xml創(chuàng)建啟動(dòng)類publicclassConfigServerApplication{publicstaticvoidmain(String[]args){}}編寫配置文件client:瀏覽器測(cè)試:可以看到配置內(nèi)在tensquare_base工程添加依添加bootstrap.yml刪除profile:devenabled:service‐id:client:tensquare_eurekatensquare_configtensquare_base,看是消息總線組件SpringCloudBus簡(jiǎn)如果我們更新碼云中的配置文件,那客戶端工程是否可以及時(shí)接受新的配置信呢?我們現(xiàn)在來(lái)做有一個(gè)測(cè)試,修改一下碼云中的配置文件中mysql的端口然后測(cè)數(shù)據(jù)依然可以查詢出來(lái),證明修改服務(wù)器中的配置并沒有更新立刻到工程,只有重新啟動(dòng)程序才會(huì)配置。那我們?nèi)绻朐诓恢貑⑽⒎?wù)的情況下更新配置如何來(lái)實(shí)現(xiàn)呢?我們使用SpringCloudBus來(lái)實(shí)現(xiàn)配置的自動(dòng)更新。配置服務(wù)修改tensquare_config工程的pom.xml,依修改application.yml,添加配managementmanagement include:配置客戶我們還是以基礎(chǔ)模塊為例,加入消息修改tensquare_base工程入依啟動(dòng)tensquare_eureka、tensquare_config和tensquare_base修改碼云上的配置文件將數(shù)據(jù)庫(kù)連接IP改為,在本地部署一份數(shù)據(jù)postman測(cè)試Url:再次觀察輸出的數(shù)據(jù)是否是了本地的mysql數(shù)據(jù)自定義配置的修改碼云上的配置文件,增加自定義ip:在tensquare_base工程中新建publicclassprivateStringip;(value="/ip",method=publicStringip

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論