版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
每特教育獨(dú)創(chuàng)SpringCloudAlibaba課程說SpringCloudAlibaba|螞蟻課堂該課程主要講解SpringCloudAlibaba組件Nacos(服務(wù)與發(fā)現(xiàn)和分布OSS、AlibabaCloudSchedulerX課程主講老師“97后架構(gòu)師-余勝軍” 解的話、可以在螞蟻課堂中學(xué)習(xí)SpringBoot螞蟻課堂SpringBoot基礎(chǔ)內(nèi)容: 需要大家想學(xué)習(xí)到的分布式/微服務(wù)相關(guān)內(nèi)容SpringCloudAlibaba微服務(wù)架構(gòu)演變過傳統(tǒng)的架構(gòu),也就是為單點(diǎn)應(yīng)用,也就是大家在早期所學(xué)習(xí)的JavaEE知識(shí)SSH或者SSM架分布式架構(gòu)模式是基于傳統(tǒng)的架構(gòu)模式演變過來(lái),將傳統(tǒng)的單點(diǎn)項(xiàng)目根據(jù)業(yè)務(wù)模塊實(shí)現(xiàn)拆SOA抽取成一個(gè)共同的服務(wù),提供給其他的服務(wù)接口實(shí)現(xiàn)調(diào)用、服務(wù)與服務(wù)之間通訊采用rpcSOAXMLJSONXML。SOAWebServiceESBSOAPESBIDEAWebServicepublicclassUserServicepublicStringgetUser(Longid)return"mayikt用戶;}publicstaticvoidmain(String[]args)",newSystem.out.println("服務(wù)發(fā)布成功}}wsdlwsdlWebServicepublicpublicclassWebServiceClientpublicstaticvoidmain(String[]args)throwsServiceException,RemoteException{UserServiceServiceLocatoruserServiceServiceLocator=newUserServiceServiceLocator();UserServiceuserService=userServiceServiceLocator.getUserServicePort();Stringresult=userService.getUser(10L);System.out.println("result:"+result);}}微服務(wù)架構(gòu)產(chǎn)生的原微服微服務(wù)架構(gòu)模式是從SOA架構(gòu)模式演變過來(lái),比SOA架構(gòu)模式粒度更加精細(xì),讓專業(yè)的人服務(wù)與服務(wù)通訊協(xié)議采用Http協(xié)議,使用restful風(fēng)格API形式來(lái)進(jìn)行通訊,格jsonhttphttp微服務(wù)架構(gòu)與SOA架構(gòu)的不SOASOASOAESBhttp+json(restful)SOA微服務(wù)架構(gòu)會(huì)產(chǎn)生那些問 分布式服務(wù)中心eureka、Zookeeper、consule、nacos等。Zipkin為什么我們要使用SpringCloudSpringCloudConfigSpringCloudNetflix組件Zuul:網(wǎng)關(guān)組件,提供智能路由、過濾等功能SpringCloudGatewaySpringCloudLoadbalancerSpringCloudr4j(Resilience4J)SpringCloudAlibabaNacos服務(wù)SpringCloudAlibabaNacosSpringCloudAlibabaSentinelSpringCloudAlibabaSeataAlibabaCloudOSS阿里云AlibabaCloudSchedulerXAlibabaCloudSMS分布式系為什么AlibabaSpringCloud組服務(wù)與發(fā)現(xiàn)在RPC調(diào)用過程中,服務(wù)與服務(wù)之間依賴關(guān)系非常大,服務(wù)Url地址管理非常復(fù)雜,所服務(wù)中心的概中心:我們的服務(wù)到我們中心,key為服務(wù)名稱、value為該服務(wù)調(diào)用地址,該類型為集合類型。Eureka、consul、zookeeper、nacos服務(wù):我們生產(chǎn)者項(xiàng)目啟動(dòng)的時(shí)候,會(huì)將當(dāng)前服務(wù)自己的信息地址 中心服務(wù)發(fā)現(xiàn):消費(fèi)者從我們的中心上獲取生產(chǎn)者調(diào)用的地址(集合,在使用負(fù)載均衡的策略獲取集群中某個(gè)地址實(shí)現(xiàn)本地rpc調(diào)用。服務(wù):將當(dāng)前服務(wù)地址到NacosNacos可以實(shí)現(xiàn)分布式服務(wù)與發(fā)現(xiàn)/分布式配置中心框架。官網(wǎng)的介紹:https Nacos具體安裝地址 ' NacosMaven<artifactId>spring-boot-starter-<!--springboot整合web組件<artifactId>spring-boot-starter-<artifactId>spring-cloud-starter-alibaba-nacos-會(huì)員服務(wù)(生產(chǎn)者服務(wù)接publicclassMemberService{privateStringserverPort;會(huì)員服務(wù)提供的接*@param@RequestMappublicStringgetUser(IntegeruserId)return"每特教育, :"+}}配置文###服 地server-addr:name:mayikt-port:8081訂單服務(wù)(消費(fèi)者訂單調(diào)用會(huì)員服publicclassOrderServiceprivateRestTemplaterestTemplate;privateDiscoveryClientdiscoveryClient; oadBalancer訂單調(diào)用會(huì)員服* publicStringorderToMember() // 中心上獲取 服務(wù)列List<ServiceInstance>serviceInstanceList=discoveryClient.getInstances("mayikt-ServiceInstanceserviceInstance=URIrpcMemberUrl= //使用本地rest形式實(shí)現(xiàn)rpc調(diào)Stringresult=restTemplate.getForObject(rpcMemberUrl+"/getUser", return訂單調(diào)用會(huì)員獲取結(jié)果 publicStringorderToMember()// 中心上獲取 服務(wù)列List<ServiceInstance>serviceInstanceList=discoveryClient.getInstances("mayikt-member");ServiceInstanceserviceInstance=loadBalancer.getSingleAddres(serviceInstanceList);URIrpcMemberUrl=//使用本地rest形式實(shí)現(xiàn)rpc調(diào)Stringresult=restTemplate.getForObject(rpcMemberUrl+"/getUser",return訂單調(diào)用會(huì)員獲取結(jié)果}}負(fù)載均衡算publicpublicinterfaceLoadBalancer根據(jù)多個(gè)不同的地址返回單個(gè)調(diào)用rpc地*@paramServiceInstancegetSingleAddres(List<ServiceInstance>}publicclassRotationLoadBalancerimplementsLoadBalancerprivateAtomicIntegeratomicInteger=newintindex=atomicInteger.incrementAndGet()%2;ServiceInstanceserviceInstance=serviceInstances.get(index);returnserviceInstance;}}Nacos與其他對(duì)比分NacosEurekaNacosZookeeperNacos的集群部署Nacos的數(shù)據(jù)持久化NacosEurekaEurekaZookeeper客戶端負(fù)載均衡器SpringCloud在SpringCloudRibbonSpringCloudRibbon。publicRestTemplaterestTemplate(){returnnewRestTemplate();}LoadBalancerClient@RequestMap@RequestMappublicObjectloadBalancerClient()returnloadBalancerClient.choose("meitemayikt-}NginxNginxNginxTomcat/Jettyrpc,rest、openfeign、dubbo。OpenFeign客戶 Maven<artifactId>spring-boot-starter-<!--springbootweb組件<artifactId>spring-boot-starter-<artifactId>spring-cloud-starter-alibaba-nacos-<artifactId>spring-cloud-starter-publicpublicinterfaceMemberService提供會(huì)員接*@paramStringgetUser(@RequestParam("userId")Long}publicpublicclassMemberServiceImplimplementsMemberService{privateStringpublicStringgetUser(LonguserId)return"我是會(huì)員服務(wù) 為:"+}}publicpublicclassOrderService{privateMemberServiceFeign訂單調(diào)用會(huì)*publicStringorderToMember()Stringresult=memberServiceFeign.getUser(10L);return我是訂單服務(wù),調(diào)用會(huì)員服務(wù)接口返回結(jié)果result;}}@FeignClient(name="meitemayikt-publicinterfaceMemberServiceFeignextendsMemberService*提供會(huì)員**@param*StringgetUser(@RequestParam("userId")Long}}分布式配置中常見的配置中心有攜程的、SpringCloudConfig、Nacos輕量級(jí)的配置中心等。NacosNaocs平臺(tái)中創(chuàng)建配置文件名稱(默認(rèn)為服務(wù)器名稱)-版本###name:meitemayikt-nacos- 地server-addr:enabled:true###server-addr:###group:###file-extension:publicclassNacosController{privateStringpublicStringgetConfig()return}publicstaticvoidmain(String[]args)}}bootstrap.yml.ymlSpringApplicationContextnacos服務(wù)器端創(chuàng)建客戶端指定版 的基本情況。0.7mysql修改conf/perties文件,增加支持mysql數(shù)據(jù)源配置(mysql,摘自官網(wǎng): cluster###ip和端Nginx相關(guān)配置###name:meitemayikt-nacos-###nacos地server-addr:enabled:true###server-addr:###group:###file-extension:nacoswindowsstartup.cmdmnacos在linux版本下運(yùn)行默認(rèn)是集群版本如果想連接單機(jī)版本startup.cmd–mRunninginclusterCAP用性、Partitiontolerance(分區(qū)容錯(cuò)性EurekaZookeeper三者都可以實(shí)現(xiàn)分布式中心框架Eureka采用AP設(shè)計(jì)思想實(shí)現(xiàn)分布式中心,完全去中心化、每個(gè)節(jié)點(diǎn)都是相等,采用你中有我、我中有你相互設(shè)計(jì)思想,只要最后有一臺(tái)Eureka節(jié)點(diǎn)存在整個(gè)微服務(wù)就可以ApCP如果選擇為Ap模式,服務(wù)的實(shí)例僅支持臨時(shí)模式,在網(wǎng)絡(luò)分區(qū)的的情況允許服務(wù)ZookeeperZAP分為和跟隨者角色。我中有你的形式實(shí)現(xiàn)中心。,大多數(shù)::每次一個(gè)新的角色都會(huì)增加投票,只要該競(jìng)選者有超過半數(shù)以上即可選為角色。的設(shè)計(jì)原理其實(shí)就是靠的誰(shuí)超時(shí)時(shí)間最短誰(shuí)就有非常大的概率為角色故障的重新實(shí)現(xiàn)己的狀態(tài)由跟隨者變?yōu)楦?jìng)選者角色,會(huì)給其他的節(jié)點(diǎn)發(fā)出的投票,只要該競(jìng)選者有超過半數(shù)以上即可選為角色。的情況下,開始重置競(jìng)選的超時(shí)時(shí)間,一直到誰(shuí)的票數(shù)最多誰(shuí)就為。SpringCloud微服務(wù)網(wǎng)關(guān)是整個(gè)微服務(wù)API請(qǐng)求的,可以實(shí)現(xiàn)日志、權(quán)限控制、解決跨域問題、ZuulGatewayGatewaySpringCloudSpringGatewayMaven<artifactId>spring-boot-starter-<artifactId>spring-cloud-starter-applicationport:####服務(wù)網(wǎng)關(guān)名name:mayikt-####開啟以服務(wù)id 中心上獲取轉(zhuǎn)發(fā)地enabled:###路由策###路由-id:####轉(zhuǎn)發(fā)/uri:/###匹配規(guī)-GatewayNacosMaven<artifactId>spring-boot-starter-<artifactId>spring-cloud-starter-<artifactId>spring-cloud-starter-alibaba-nacos-applicationport:####服務(wù)網(wǎng)關(guān)名name:mayikt-####開啟以服務(wù)id 中心上獲取轉(zhuǎn)發(fā)地enabled:###路由策###路由-id:####轉(zhuǎn)發(fā)/uri:/###匹配規(guī)-###id:lb負(fù)載均衡形式轉(zhuǎn)發(fā)uri:lb://mayikt-memberserver-addr:NginxGatewayjavaNginx+LuapublicclassTokenFilterimplementsGlobalFilter{publicpublicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain){Stringtoken=exchange.getRequest().getQueryParams().getFirst("token");if(token==null||token.isEmpty()){ServerHttpResponseresponse=exchange.getResponse();Stringmsg="tokennotisnull";DataBufferbuffer=return}return}}OATUH2.0appidappsocetaccesstokenhttpsmd5使用微服務(wù)網(wǎng)關(guān)實(shí)現(xiàn)Api認(rèn)證等、白對(duì)我們的接口實(shí)現(xiàn)服務(wù)的保護(hù)、熔斷、降級(jí)等等。apiswagger使用Nginx或者lvs虛擬vip增加系統(tǒng)的高可privateStringpublicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain)//如何獲取參數(shù)呢Stringtoken=ServerHttpResponseresponse=exchange.getResponse();Stringmsg="tokennotisnull";DataBufferbuffer=return}在請(qǐng)求頭中存放serverPortServerHttpRequestrequest=exchange.getRequest().mutate().header("serverPort",serverPort).build();returnchain.filter(exchange.mutate().request(request).build());}Nginxserverserverserver}serverlisten80;location/{}};;`id`int(11)NOTNULLPRIMARYKEY(`id`)publicclassGatewayServiceimplementsApplicationEventPublisherAwareprivateApplicationEventPublisherpublisher;privateRouteDefinitionWriterprivateMayiktGatewayMapperthis.publisher=}publicvoidinitAllRoute()//從數(shù)據(jù)庫(kù)查詢配置的網(wǎng)關(guān)配List<GateWayEntity>gateWayEntities=mayiktGateway.gateWayAll();for(GateWayEntitygw:gateWayEntities){}}publicStringloadRoute(GateWayEntitygateWayEntity){RouteDefinitiondefinition=newRouteDefinition();Map<String,String>predicateParams=newHashMap<>(8);PredicateDefinitionpredicate=newPredicateDefinition();FilterDefinitionfilterDefinition=newFilterDefinition();Map<String,String>filterParams=newHashMap<>(8);//如果配置路由type為0的話則 中心獲取服URIuri=uri=uri ponentsBuilder.fromUriString("lb://"+gateWayEntity.getRouteUrl()+}elseuri }//定義的路由唯一的id//路由轉(zhuǎn)發(fā)地predicateParams.put("pattern",gateWayEntity.getRoutePattern());//名稱是固定的,路徑去前綴filterParams.put("_genkey_0","1");this.publisher.publishEvent(newRefreshRoutesEvent(this));return"success";}}publicpublicinterfaceMayiktGatewayMapper@Select("SELECTIDASID,route_idasrouteid,route_nameasrouteName,route_patternasroutePattern\n"",route_typeasrouteType,route_urlasrouteUrl\n""FROMpublicList<GateWayEntity>@Update("updatemayikt_gatewaysetroute_url=#{routeUrl}wherepublicIntegerupdateGateWay(@Param("routeId")StringrouteId,@Param("routeUrl")String}Maven<artifactId>mybatis-spring-boot-mysql依賴<artifactId>mysql-connector-阿里巴巴數(shù)據(jù)源/mayikt轉(zhuǎn)到到/url:jdbc:mysql://localhost:3306/meite_gateWay?useUnicode=true&characterEncoding=UTF-username:password:iduri、一組謂詞+過濾器一起組合而成,如果謂謂詞:匹配Http--id:uri:/###匹配規(guī)-After=2017-01-20T17:42:47.789-201712017:42MountainTime(Denver)-id-id:uri:/###匹配規(guī)- --id:uri:--Weight=group1,-id:weight_lowuri:htt-Weight=group1,idid:uri:lb://meitemayikt-id:uri:lb://mayikt-publicclassCrossOriginFilterimplementsGlobalFilter{publicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain){ServerHttpRequestrequest=exchange.getRequest();ServerHttpResponseresponse=exchange.getResponse();HttpHeadersheaders=response.getHeaders();hea
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年高中政治第3單元思想方法與創(chuàng)新意識(shí)課時(shí)作業(yè)18用對(duì)立統(tǒng)一的觀點(diǎn)看問題含解析新人教版必修4
- 2024-2025學(xué)年新教材高中歷史第三單元遼宋夏金多民族政權(quán)的并立與元朝的統(tǒng)一單元評(píng)估課后作業(yè)含解析新人教版必修中外歷史綱要上
- 2025年度盤扣建筑構(gòu)件質(zhì)量控制檢測(cè)合同4篇
- 2025年度汽車制造企業(yè)總經(jīng)理聘請(qǐng)及智能制造合同范本4篇
- 二零二五年度智慧社區(qū)安防系統(tǒng)安裝施工合同范本3篇
- 二零二五年度窗簾產(chǎn)業(yè)園區(qū)建設(shè)與管理合同3篇
- 二零二五年度四人合伙企業(yè)股權(quán)投資合同3篇
- 2025年度餐飲多人合伙經(jīng)營(yíng)營(yíng)銷推廣合同范本3篇
- 二手房購(gòu)買補(bǔ)充合同:2024年定制版版B版
- 二零二五年度2025版二手設(shè)備存量買賣服務(wù)協(xié)議2篇
- 產(chǎn)品共同研發(fā)合作協(xié)議范本5篇
- 風(fēng)水學(xué)的基礎(chǔ)知識(shí)培訓(xùn)
- 2024年6月高考地理真題完全解讀(安徽?。?/a>
- 吸入療法在呼吸康復(fù)應(yīng)用中的中國(guó)專家共識(shí)2022版
- 1-35kV電纜技術(shù)參數(shù)表
- 信息科技課程標(biāo)準(zhǔn)測(cè)(2022版)考試題庫(kù)及答案
- 施工組織設(shè)計(jì)方案針對(duì)性、完整性
- 2002版干部履歷表(貴州省)
- DL∕T 1909-2018 -48V電力通信直流電源系統(tǒng)技術(shù)規(guī)范
- 2024年服裝制版師(高級(jí))職業(yè)鑒定考試復(fù)習(xí)題庫(kù)(含答案)
- 門診部縮短就診等候時(shí)間PDCA案例-課件
評(píng)論
0/150
提交評(píng)論