十次服務(wù)開發(fā)v1.第8章_第1頁
十次服務(wù)開發(fā)v1.第8章_第2頁
十次服務(wù)開發(fā)v1.第8章_第3頁
十次服務(wù)開發(fā)v1.第8章_第4頁
十次服務(wù)開發(fā)v1.第8章_第5頁
免費預(yù)覽已結(jié)束,剩余19頁可下載查看

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論