Java應(yīng)用開發(fā)(中、高級)課件 項目4 容器化微服務(wù)架構(gòu)設(shè)計、開發(fā)與實施_第1頁
Java應(yīng)用開發(fā)(中、高級)課件 項目4 容器化微服務(wù)架構(gòu)設(shè)計、開發(fā)與實施_第2頁
Java應(yīng)用開發(fā)(中、高級)課件 項目4 容器化微服務(wù)架構(gòu)設(shè)計、開發(fā)與實施_第3頁
Java應(yīng)用開發(fā)(中、高級)課件 項目4 容器化微服務(wù)架構(gòu)設(shè)計、開發(fā)與實施_第4頁
Java應(yīng)用開發(fā)(中、高級)課件 項目4 容器化微服務(wù)架構(gòu)設(shè)計、開發(fā)與實施_第5頁
已閱讀5頁,還剩215頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目4

容器化微服務(wù)架構(gòu)

設(shè)計、開發(fā)與實施【學(xué)習(xí)目標(biāo)】本項目主要學(xué)習(xí)微服務(wù)架構(gòu)的設(shè)計、開發(fā)與部署,了解微服務(wù)架構(gòu)的設(shè)計思路,掌握使用Eureka框架構(gòu)建服務(wù)注冊中心、使用feign框架便捷地調(diào)用服務(wù)接口、使用Hystrix框架實現(xiàn)容錯處理等微服務(wù)技術(shù)框架,解決單體應(yīng)用架構(gòu)可靠性差、擴(kuò)展能力受限等問題;了解系統(tǒng)容器化的部署方式,掌握使用Docker鏡像制作與部署各個服務(wù),解決系統(tǒng)快速部署的問題?!卷椖拷榻B】將項目四的餐廳點餐系統(tǒng)使用微服務(wù)架構(gòu)的設(shè)計思路進(jìn)行改造升級,基于主流的微服務(wù)開發(fā)框架SpringCloud,結(jié)合常用的技術(shù)框架實現(xiàn)服務(wù)的注冊與管理、服務(wù)之間的調(diào)用、熔斷處理以及系統(tǒng)的容器化部署。【知識結(jié)構(gòu)】任務(wù)1.設(shè)計劃分微服務(wù)任務(wù)描述按照微服務(wù)架構(gòu)重新設(shè)計餐廳點餐系統(tǒng),按照該系統(tǒng)的特定功能拆分出獨立的服務(wù)以及定義這些服務(wù)需要提供的接口服務(wù)。知識準(zhǔn)備1.微服務(wù)架構(gòu)介紹:微服務(wù)架構(gòu)是一種架構(gòu)模式,它把應(yīng)用程序功能分解為一組小的服務(wù)為用戶提供最終價值,服務(wù)之間互相協(xié)調(diào)、互相配合,經(jīng)常采用HTTP資源API這樣輕量的機(jī)制來相互通信,這些服務(wù)圍繞業(yè)務(wù)功能進(jìn)行構(gòu)建,并能通過全自動的部署機(jī)制來進(jìn)行獨立部署。簡單說微服務(wù)架構(gòu)是一種架構(gòu)風(fēng)格,可為應(yīng)用程序提供更高的可維護(hù)性、可測試性和可部署性。2.服務(wù)是什么:服務(wù)就是一個單一的、可獨立部署的軟件組件,它實現(xiàn)了一些有用的功能,服務(wù)具有接口,為其客戶端提供對功能的訪問,比如用戶服務(wù)。3.微服務(wù)架構(gòu)特點:1)由完成特定功能的小服務(wù)組成,把一個系統(tǒng)拆分成多個模塊,每個模塊又可以細(xì)分多個微服務(wù),每個服務(wù)都可獨立的并且支持多節(jié)點部署,運(yùn)行在獨立的進(jìn)程中。2)去中心化的服務(wù)治理,每個微服務(wù)允許使用不同的技術(shù)來開發(fā),且數(shù)據(jù)可以不再單獨的保存在一個數(shù)據(jù)庫中,允許多種數(shù)據(jù)庫技術(shù)。3)高內(nèi)聚低耦合的設(shè)計,組成各個應(yīng)用的微服務(wù),都要盡可能地實現(xiàn)“高內(nèi)聚和低耦合”的目標(biāo),每個微服務(wù)都擁有自己的領(lǐng)域邊界和完整的業(yè)務(wù)邏輯。4)容錯設(shè)計和彈性設(shè)計,當(dāng)服務(wù)發(fā)生故障時,能夠快速地試錯,能夠快速地檢測出故障,而且能夠在一定的情況下自動恢復(fù)。5)自動化運(yùn)維,基礎(chǔ)設(shè)施例如服務(wù)器、數(shù)據(jù)庫、中間件等能夠彈性且自動化分配資源,微服務(wù)迭代構(gòu)建要能夠滿足自動化的提交版本、自動化代碼檢查、自動化測試、自動化部署以及監(jiān)控等。4.微服務(wù)的設(shè)計步驟:1)定義系統(tǒng)操作,將應(yīng)用程序的需求提煉為各種關(guān)鍵請求;2)定義服務(wù),將系統(tǒng)拆分為多個小服務(wù);3)定義服務(wù)接口,確定每個服務(wù)的接口,將1)中的關(guān)鍵請求分配給到各個服務(wù)接口。5.微服務(wù)的拆分設(shè)計方法:決定如何把系統(tǒng)分解為一組服務(wù)就是微服務(wù)架構(gòu)的關(guān)鍵,常見的服務(wù)拆分模式有以下兩種模式:1)根據(jù)業(yè)務(wù)能力分解模式,圍繞業(yè)務(wù)功能組織服務(wù);2)根據(jù)子域分解模式,子域圍繞領(lǐng)域驅(qū)動設(shè)計來組織服務(wù)。任務(wù)實施步驟1:定義系統(tǒng)操作操作者用戶故事請求接口描述管理員、服務(wù)員、后廚人員用戶登錄/login

用戶驗證并授權(quán)訪問資源服務(wù)員菜品列表/getdishesbypage獲取菜品列表服務(wù)員設(shè)定桌號/settableid設(shè)定點餐的餐桌號服務(wù)員點餐提交/addcart/commitcart提交點餐服務(wù)員訂單列表/getpaylist/requestpay獲取待支付列表后廚人員菜品烹飪管理/getrtdishes/dishesdone/getrtorder"通過按鈕確定對應(yīng)菜品的烹制狀態(tài)(準(zhǔn)備烹制、正在烹制、烹制完畢)管理員用戶管理/adduser/modifyuser/deleteuser/getonlinekitchen/getonlinewaiters/getuserbypage用戶的增刪改查功能管理員菜品管理/adddishes/modifydishes/deletedishes/getdishesbypage菜品的增刪改查功能根據(jù)用戶故事識別系統(tǒng)必須處理的各種請求,識別出應(yīng)用程序的核心系統(tǒng)操作,見表5-1。表5-1用戶故事接口表步驟2:定義服務(wù)使用業(yè)務(wù)服務(wù)能力進(jìn)行業(yè)務(wù)拆分,然后從業(yè)務(wù)能力定義出服務(wù)。訂餐系統(tǒng)的核心業(yè)務(wù)能力如下:1)用戶管理,管理服務(wù)員和后廚人員的操作流程和權(quán)限;2)菜品管理,管理菜品的添加、修改和刪除;3)訂單管理,管理從點餐、確認(rèn)菜品訂單到完成訂單的全過程;1)菜品烹制管理,管理菜品烹制狀態(tài)。根據(jù)核心業(yè)務(wù)定義服務(wù),對應(yīng)列表見表5-2。核心業(yè)務(wù)能力服務(wù)用戶管理UserService菜品管理DishService訂單管理OrderService菜品烹制管理表5-2核心業(yè)務(wù)服務(wù)對應(yīng)表步驟3:定義服務(wù)接口定義了系統(tǒng)操作列表和服務(wù)列表之后,下一步就是定義每個服務(wù)的接口,該接口可以由外部客戶端調(diào)用,也可以有其他服務(wù)調(diào)用。定義UserService的服務(wù)接口,見表5-3。接口功能HTTP請求方式URL地址支持格式獲取用戶列表GET/getuserbypageJSON新增用戶數(shù)據(jù)POST/adduserJSON修改用戶數(shù)據(jù)POST/adminmodifyuserJSON刪除用戶數(shù)據(jù)GET/deleteuserJSON表5-3服務(wù)接口表知識小結(jié)【對應(yīng)證書技能】1)掌握微服務(wù)的常規(guī)設(shè)計步驟:定義系統(tǒng)操作、定義服務(wù)以及定義服務(wù)接口。根據(jù)用戶需求識別系統(tǒng)必須處理的各種請求來定義系統(tǒng)的操作,然后根據(jù)業(yè)務(wù)能力分解模式,圍繞業(yè)務(wù)功能組織服務(wù),形成UserService、DishService和OrderService三個服務(wù),最后將系統(tǒng)操作對用到服務(wù)的接口。2)基于RestfulAPI規(guī)范設(shè)計服務(wù)的接口,滿足系統(tǒng)操作的需求。本任務(wù)知識技能點與等級證書技能的對應(yīng)關(guān)系見表5-4。任務(wù)1知識技能點對應(yīng)證書技能知識點技能點工作領(lǐng)域工作任務(wù)職業(yè)技能要求等級軟件服務(wù)接口設(shè)計原則使RestfulAPI規(guī)范設(shè)計服務(wù)的接口2.軟件后端設(shè)計2.3服務(wù)接口設(shè)計2.3.1了解軟件服務(wù)接口設(shè)計原則;2.3.2掌握RestfulAPI接口的作用與規(guī)范;高級表5-4任務(wù)1知識技能點與等級證書技能對應(yīng)拓展練習(xí)完成DishService和OrderService服務(wù)的接口設(shè)計列表。謝謝觀看任務(wù)2.搭建服務(wù)注冊與發(fā)現(xiàn)中心任務(wù)描述EurekaServer用于微服務(wù)架構(gòu)下的服務(wù)注冊和發(fā)現(xiàn),本任務(wù)就是使用EurekaServer搭建服務(wù)注冊與發(fā)現(xiàn)中心。知識準(zhǔn)備在微服務(wù)架構(gòu)中,會拆分多個“小服務(wù)”,這些“小服務(wù)”往往都有提供接口,調(diào)用接口的功能,這些“小服務(wù)”之間的調(diào)用需要服務(wù)發(fā)現(xiàn)和注冊中心進(jìn)行維護(hù),Eureka是Netflix中的一個開源框架,用于服務(wù)注冊和發(fā)現(xiàn)。Spring-CloudEuraka是SpringCloud是對Euraka的集成,實現(xiàn)微服務(wù)的注冊與發(fā)現(xiàn)。Eureka包含EurekaServer和EurekaClient兩部分。為了便于理解,將Eurekaclient再分為ServiceProvider和ServiceConsumer,下面是各部分的作用:1)EurekaServer,提供服務(wù)的注冊與發(fā)現(xiàn);2)ServiceProvider,服務(wù)提供方,將自身服務(wù)注冊到Eureka,從而使服務(wù)消費方能夠找到;3)ServiceConsumer,服務(wù)消費方,從Eureka獲取注冊服務(wù)列表,從而能夠消費服務(wù)。任務(wù)實施步驟1:創(chuàng)建項目1)使用SpringStarterProject創(chuàng)建項目,單擊選擇“File->New->Project”,在彈出的“NewProject”窗口選擇“SrpingBoot->SpringStarterProject”,單擊“Next”按鈕,過程如圖

5-1所示:圖5-1創(chuàng)建項目-12)在“NewSpringStarterProject”窗口,設(shè)置Name為“ordersys_eurekaserver”,Group為“com.chinasofti”,JavaVersion為“8”,Package為“com.chinasofti.ordersys_eurekaserver”,單擊“Next”按鈕,過程如圖5-2所示:圖5-2創(chuàng)建項目-23)在“NewSpringStarterProjectDependencies”窗口,單擊選擇“SpringCloudDiscovery->EurekaServer”和“Web->SpringWeb”,單擊“Finish”按鈕,過程如圖

5-3所示:圖5-3創(chuàng)建項目-3步驟2:在啟動類上添加@EnableEurekaServer,使該項目作為注冊中心。@EnableEurekaServer@SpringBootApplicationpublicclassOrdersysEurekaserverApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysEurekaserverApplication.class,args); }}步驟3:配置Eureka注冊中心參數(shù)。1)將“resources”目錄下的“application.properties”文件改名為“application.yml”。2)配置“application.yml”文件,通過配置registerWithEureka和fetchRegistry為false來表明該服務(wù)是eurekaserver。server:port:8761eureka:instance:hostname:localhostclient:#聲明自己是個服務(wù)端registerWithEureka:falsefetchRegistry:falseserviceUrl:defaultZone:http://${eureka.instance.hostname}:${server.port}/eureka/server:enable-self-preservation:false步驟4:啟動&訪問注冊中心頁面1)啟動注冊中心,選擇啟動類“OrdersysEurekaserverApplication”,右鍵單擊選擇“RunAs->SpringBootApp”,過程如圖

5-4所示:圖5-4啟動注冊中心2)訪問注冊中心,打開瀏覽器,在地址欄中輸入“http://localhost:8761/”,結(jié)果如圖5-5所示:圖5-5訪問注冊中心知識小結(jié)【對應(yīng)證書技能】使用Spring-CloudEuraka搭建服務(wù)注冊與發(fā)現(xiàn)中心步驟簡單,主要是下面三個步驟:使用SpringBoot快速構(gòu)建項目,注意要導(dǎo)入“SpringCloudDiscovery->EurekaServer”依賴;在啟動類上添加@EnableEurekaServer,啟動注冊中心;配置“application.yml”文件設(shè)置注冊中心的參數(shù)。本任務(wù)知識技能點與等級證書技能的對應(yīng)關(guān)系見表5-5。任務(wù)2知識技能點對應(yīng)證書技能知識點技能點工作領(lǐng)域工作任務(wù)職業(yè)技能要求等級服務(wù)注冊與發(fā)現(xiàn)中心使用Euraka框架搭建服務(wù)注冊與發(fā)現(xiàn)中心3.高性能系統(tǒng)開發(fā)3.3Java微服務(wù)開發(fā)與部署3.3.4熟練掌握Eruka/Consul服務(wù)注冊與發(fā)現(xiàn)中心的部署于配置;高級表5-5任務(wù)2知識技能點與等級證書技能對應(yīng)謝謝觀看任務(wù)3.實現(xiàn)菜品服務(wù)的設(shè)計與開發(fā)任務(wù)描述

本任務(wù)就是使用EurekaClient構(gòu)建菜品服務(wù)并將服務(wù)注冊到注冊中心。知識準(zhǔn)備EurekaClient(服務(wù)提供者)EurekaClient用于將服務(wù)注冊到注冊中心,EurekaServer會將注冊信息向其他EurekaServer進(jìn)行同步,當(dāng)服務(wù)消費者要調(diào)用服務(wù)提供者,則向服務(wù)注冊中心獲取服務(wù)提供者地址,然后會將服務(wù)提供者地址緩存在本地,下次再調(diào)用時,則直接從本地緩存中取,完成一次調(diào)用。任務(wù)實施步驟1:創(chuàng)建菜品服務(wù)項目參考任務(wù)2創(chuàng)建項目“ordersys_dishservice”,選擇該項目的依賴“SpringCloudDiscovery->EurekaDiscoveryClient”、“Web->SpringWeb”和“SpringCloudRouting->OpenFeign”,創(chuàng)建項目,如圖

5-6所示:圖5-6創(chuàng)建項目步驟2:在啟動類上添加@EnableEurekaClient,使該項目作為服務(wù)提供者。@EnableEurekaClient@SpringBootApplicationpublicclassOrdersysDishserviceApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysDishserviceApplication.class,args); }}步驟3:配置服務(wù)提供者參數(shù)1)將“resources”目錄下的“application.properties”文件改名為“application.yml”。2)配置“application.yml”文件,配置“defaultZone:http://localhost:8761/eureka/”指向注冊中心,“name:dishService”指定dishService為服務(wù)名字,用于對外提供服務(wù)名。server:port:8771#指向注冊中心地址eureka:client:serviceUrl:defaultZone:http://localhost:8761/eureka/#服務(wù)名稱,建議駝峰命名spring:application:name:dishService步驟5:引入項目四的菜品代碼1)引入JAVA項目代碼,根據(jù)提供的項目代碼復(fù)制到DishService項目,結(jié)果如圖5-8所示:圖5-8菜品代碼目錄2)配置“pom.xml”,引入Mybatis框架和MySQL驅(qū)動,代碼如下:<!--mybatis--><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version></dependency>

<!--數(shù)據(jù)庫驅(qū)動--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>8.0.15</version></dependency>3)配置“application.yml”,#服務(wù)名稱,建議駝峰命名spring:application:name:dishServiceprofiles:active:dev#熱編譯devtools:restart:#需要實時更新的目錄additional-paths:resources/**,static/**,templates/**datasource:driver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://34:3306/ordersys-v3?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=UTCusername:rootpassword:Apj123@pjplatform:mysqlmybatis:#指定實體類存放的包路徑type-aliases-package:com.chinasofti.ordersys_dishservice.model#指定mapper.xml文件的位置為/mybatis-mappers/下的所有xml文件mapper-locations:classpath:/mybatis-mappers/*#轉(zhuǎn)換到駝峰命名configuration:mapUnderscoreToCamelCase:true步驟6:驗證服務(wù)接口1)按順序分別運(yùn)行注冊中心和菜品服務(wù)。2)打開Postman,在地址欄中輸入“http://localhost:8771/admin/dishes/toprecommend”,可以看到獲取頭4條推薦菜品信息,結(jié)果如圖5-9所示:圖5-9驗證菜品服務(wù)知識小結(jié)【對應(yīng)證書技能】使用Spring-CloudEurakaClient搭建服務(wù)并注冊到注冊中心,主要是下面三個步驟:1)使用SpringBoot快速構(gòu)建項目,注意要導(dǎo)入“SpringCloudDiscovery->EurekaServer”依賴;2)在啟動類上添加@EnableEurekaServer,啟動注冊中心;3)配置“application.yml”文件設(shè)置注冊中心的參數(shù)。本任務(wù)知識技能點與等級證書技能的對應(yīng)關(guān)系見表5-6。

任務(wù)2知識技能點對應(yīng)證書技能知識點技能點工作領(lǐng)域工作任務(wù)職業(yè)技能要求等級構(gòu)建服務(wù)提供者使用EurakaClient構(gòu)建服務(wù)并注冊到注冊中心3.高性能系統(tǒng)開發(fā)3.3Java微服務(wù)開發(fā)與部署3.3.4熟練掌握Eruka/Consul服務(wù)注冊與發(fā)現(xiàn)中心的部署于配置;高級表5-6任務(wù)3知識技能點與等級證書技能對應(yīng)拓展練習(xí)按照任務(wù)3的步驟構(gòu)建用戶服務(wù)并注冊到注冊中心。謝謝觀看任務(wù)4.實現(xiàn)訂單服務(wù)設(shè)計與開發(fā)任務(wù)描述本任務(wù)是開發(fā)訂單服務(wù)并將服務(wù)注冊到注冊中心,同時通過Feign框架提供訂單服務(wù)作為服務(wù)消費者去調(diào)用菜單服務(wù)的能力。知識準(zhǔn)備1)Feign(服務(wù)消費者)Feign是springcloud中服務(wù)消費端的調(diào)用框架,Feign是一個聲明式、模板化的HTTP客戶端,可幫助更加便捷、優(yōu)雅的調(diào)用接口。在SpringCloud中,使用Feign創(chuàng)建一個接口并對它進(jìn)行注解,編碼就完成了。它具有可插拔的注解支持包括Feign注解與JAX-RS注解,F(xiàn)eign還支持可插拔的編碼器與解碼器,SpringCloud對Feign做了增強(qiáng),使Feign支持SpringMVC的注解,并集成Ribbon和Eureka,使用Feign使用非常方便。2)Hystix(熔斷器)Hystrix是Netflix開源的一款容錯框架,同樣具有自我保護(hù)能力,Hystix是一個遠(yuǎn)程過程調(diào)用的代理,在連續(xù)失敗次數(shù)超過指定閾值后的一段時間內(nèi),這個代理會立即拒絕其他調(diào)用。3)服務(wù)故障的“雪崩”效應(yīng)為了保證其高可用,單個服務(wù)通常會集群部署。由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證100%可用,如果單個服務(wù)出現(xiàn)問題,調(diào)用這個服務(wù)就會出現(xiàn)線程阻塞,此時若有大量的請求涌入,Servlet容器的線程資源會被消耗完畢,導(dǎo)致服務(wù)癱瘓。服務(wù)與服務(wù)之間的依賴性,故障會傳播,會對整個微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果,這就是服務(wù)故障的“雪崩”效應(yīng),Hystrix用于解決服務(wù)故障的“雪崩”效應(yīng)這個問題。任務(wù)實施步驟1:創(chuàng)建訂單服務(wù)1)參考任務(wù)3創(chuàng)建項目“ordersys_orderservice”,其中依賴包與任務(wù)3完全相同。2)在啟動類上添加@EnableEurekaClient,使該項目作為服務(wù)提供者。@EnableEurekaClient@SpringBootApplicationpublicclassOrdersysOrderserviceApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysOrderserviceApplication.class,args); }}3)修改并配置“application.yml”文件。server:port:8772#指向注冊中心地址eureka:client:serviceUrl:defaultZone:http://localhost:8761/eureka/#服務(wù)名稱,建議駝峰命名spring:application:name:orderService步驟2:驗證訂單服務(wù)是否注冊1)按順序分別運(yùn)行啟動文件,啟動注冊中心、菜品服務(wù)和訂單服務(wù)。2)訪問注冊中心,打開瀏覽器,在地址欄中輸入“http://localhost:8761/”,可以看到dishService和orderService服務(wù)已經(jīng)在注冊中心中,結(jié)果如圖5-10所示:圖5-10注冊中心的訂單服務(wù)步驟3:引入項目四中的訂單相關(guān)代碼參考任務(wù)3的步驟,根據(jù)提供的代碼引入訂單代碼到項目。步驟4:服務(wù)間調(diào)用在項目實際應(yīng)用中,往往需要服務(wù)之間相互調(diào)用,如在點餐系統(tǒng)中,訂單服務(wù)根據(jù)菜品的ID獲取菜品詳情,微服務(wù)框架中常常使用Feign框架來實現(xiàn)服務(wù)之間的調(diào)用通信。1)在菜品服務(wù)中增加獲取菜品詳情接口,在“ordersys_dishservice”項目的“AdminDishesController”類中增加getDishesForApi()方法,其中對外接口URL為“/admin/dishes/api/get”,使用@RequestParam將請求參數(shù)“dishesId”綁定到方法參數(shù)上,代碼如下:@GetMapping("/api/get")publicResults<DishesInfo>getDishesForApi(@RequestParam(value="dishesId")IntegerdishesId){ returnResults.success(service.getDishesById(dishesId));}2)在訂單服務(wù)中啟用Feign客戶端,啟動類“OrdersysOrderserviceApplication”中增加@EnableFeignClients注解,開啟SpringCloudFeign的支持功能,代碼如下:@EnableEurekaClient@EnableFeignClients@SpringBootApplicationpublicclassOrdersysOrderserviceApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysOrderserviceApplication.class,args); }}3)在訂單服務(wù)中定義DishFeignClient訪問菜品服務(wù),在“service”包下增加DishFeignClient接口,使用@FeignClient注解指定服務(wù)名“dishservice”來綁定菜單服務(wù),然后再使用@GetMapping("/admin/dishes/api/get")注解來綁定具體菜單服務(wù)提供的REST接口,@RequestParam綁定參數(shù),注意一定要和菜品服務(wù)中的getDishesForApi()方法的參數(shù)保持一致。@FeignClient(name="dishservice")publicinterfaceDishFeignClient{ @GetMapping("/admin/dishes/api/get") Results<DishesInfo>findAllOrders(@RequestParam(value="dishesId")intid);}4)在“OrderController”下引入DishFeignClient,增加getDishesForApi()方法,通過調(diào)用findAllOrders()來獲取菜品數(shù)據(jù)。@AutowiredprivateDishFeignClientdishFeignClient;

@GetMapping("/api/get")publicResults<DishesInfo>getDishesForApi(@RequestParam(value="dishesId")IntegerdishesId){ returndishFeignClient.findAllOrders(dishesId);}5)驗證服務(wù)之間的調(diào)用通信。按順序分別運(yùn)行注冊中心、菜品服務(wù)和訂單服務(wù),打開Postman,在地址欄中輸入“http://localhost:8772/order/api/get?dishesId=1”,可以看到訂單服務(wù)通過調(diào)用菜品服務(wù)獲取菜品信息,結(jié)果如圖5-11所示:圖5-11驗證訂單服務(wù)步驟5:服務(wù)熔斷處理在微服務(wù)架構(gòu)的點餐系統(tǒng)中,訂單服務(wù)請求菜品服務(wù),如果菜品服務(wù)出現(xiàn)故障,會導(dǎo)致連鎖故障。當(dāng)對特定的服務(wù)的調(diào)用的不可用且達(dá)到一個閥值,如Hystrix是5秒20次,斷路器將會被打開。1)在“pom.xml”文件中增加Hystrix依賴,代碼如下:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> <version>2.2.8.RELEASE</version></dependency>2)開啟feign支持熔斷處理,修改訂單服務(wù)的“application.yml”文件,開啟hystrix,代碼如下:feign:circuitbreaker:enabled:true3)在啟動類上添加@EnableCircuitBreaker注解,代碼如下:@EnableCircuitBreaker@EnableEurekaClient@EnableFeignClients@SpringBootApplicationpublicclassOrdersysOrderserviceApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysOrderserviceApplication.class,args); }}4)增加配置熔斷處理類,在DishFeignClient接口的注解中加上fallback的指定類“DishFeignClientFallback”用于實現(xiàn)斷路器,F(xiàn)allback相當(dāng)于是降級操作.對于查詢操作,實現(xiàn)一個fallback方法,當(dāng)請求菜品服務(wù)出現(xiàn)異常的時候,可以使用fallback方法返回的值,fallback方法的返回值一般是設(shè)置的默認(rèn)值或者直接返回錯誤,代碼如下:@FeignClient(name="dishservice",fallback=DishFeignClientFallback.class)publicinterfaceDishFeignClient{ @GetMapping("/admin/dishes/api/get") Results<DishesInfo>findAllOrders(@RequestParam(value="dishesId")intid);}5)實現(xiàn)熔斷處理類,“service”包下增加DishFeignClientFallback實現(xiàn)DishFeignClient接口,直接返回錯誤,代碼如下:publicclassDishFeignClientFallbackimplementsDishFeignClient{ @Override publicResults<DishesInfo>findAllOrders(intid){ System.out.println("降級處理!"); circuitbreakerreturnResults.failure(10001,"抱歉,菜品服務(wù)走失了..."); }}知識小結(jié)【對應(yīng)證書技能】在微服務(wù)架構(gòu)中,多個服務(wù)之間使用Feign框架實現(xiàn)服務(wù)間的通信,F(xiàn)eign是一個聲明式的偽Http客戶端,使用Feign,僅需要創(chuàng)建一個接口并通過@FeignClient注解綁定調(diào)用目標(biāo)服務(wù)即可調(diào)用該服務(wù);在服務(wù)與服務(wù)之間相互調(diào)用時,Hystrix框架用于如果服務(wù)出現(xiàn)故障時提供熔斷功能,通過fallback方法可以直接返回一個固定值,避免連鎖故障拖垮服務(wù)。本任務(wù)知識技能點與等級證書技能的對應(yīng)關(guān)系見表5-7。任務(wù)2知識技能點對應(yīng)證書技能知識點技能點工作領(lǐng)域工作任務(wù)職業(yè)技能要求等級服務(wù)間調(diào)用;服務(wù)斷路器和熔斷處理;

使用SpringCloudHystrix實現(xiàn)服務(wù)熔斷;使用SpringCloudFeign實現(xiàn)服務(wù)間的調(diào)用;3.高性能系統(tǒng)開發(fā)3.3Java微服務(wù)開發(fā)與部署3.3.7能夠基于SpringCloud實現(xiàn)服務(wù)斷路器和熔斷處理;高級表5-7任務(wù)4知識技能點與等級證書技能對應(yīng)謝謝觀看任務(wù)5.構(gòu)建Gateway網(wǎng)關(guān)路由服務(wù)任務(wù)描述本任務(wù)就是使用SpringCloudGateway框架構(gòu)建網(wǎng)關(guān)服務(wù),接收并轉(zhuǎn)發(fā)所有的客戶端調(diào)用。知識準(zhǔn)備1)網(wǎng)關(guān)服務(wù)通常在項目中為了簡化前端的調(diào)用邏輯,同時也簡化內(nèi)部服務(wù)之間互相調(diào)用的復(fù)雜度,具體作用就是轉(zhuǎn)發(fā)服務(wù),接收并轉(zhuǎn)發(fā)所有內(nèi)外部的客戶端調(diào)用,網(wǎng)關(guān)其他常見的功能還有權(quán)限認(rèn)證,限流控制,日志輸出等等。2)SpringCloudGateway是SpringCloud的一個全新項目,該項目是基于Spring5.0,SpringBoot2.0和ProjectReactor等技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的API路由管理方式。SpringCloudGateway不僅提供統(tǒng)一的路由方式,并且基于Filter鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/指標(biāo),和限流。3)SpringCloudGateway的核心概念路由(Route):路由是網(wǎng)關(guān)最基礎(chǔ)的部分,路由信息由ID、目標(biāo)URI、一組斷言和一組過濾器組成。如果斷言路由為真,則說明請求的URI和配置匹配。斷言(Predicate):Java8中的斷言函數(shù)。SpringCloudGateway中的斷言函數(shù)輸入類型是Spring5.0框架中的ServerWebExchange。SpringCloudGateway中的斷言函數(shù)允許開發(fā)者去定義匹配來自于HttpRequest中的任何信息,比如請求頭和參數(shù)等。過濾器(Filter):一個標(biāo)準(zhǔn)的SpringWebFilter。SpringCloudGateway中的Filter分為兩種類型,分別是GatewayFilter和GlobalFilter。過濾器將會對請求和響應(yīng)進(jìn)行處理。任務(wù)實施步驟1:創(chuàng)建網(wǎng)關(guān)服務(wù)1)參考任務(wù)2創(chuàng)建項目“ordersys_gateway”,選擇該項目的依賴“SpringCloudDiscovery->EurekaDiscoveryClient”和“SpringCloudRouting->Gateway”,創(chuàng)建項目,如圖5-13所示:圖5-13創(chuàng)建網(wǎng)關(guān)服務(wù)2)在啟動類上添加@EnableEurekaClient,使該項目作為服務(wù)提供者。@EnableEurekaClient@SpringBootApplicationpublicclassOrdersysGatewayApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(OrdersysGatewayApplication.class,args); }}3)修改并配置“application.yml”文件,設(shè)置服務(wù)端口8762以及向注冊中心注冊。server:port:8762#指向注冊中心地址eureka:client:serviceUrl:defaultZone:http://localhost:8761/eureka/#服務(wù)名稱,建議駝峰命名spring:application:name:gateway步驟2:自定義配置路由規(guī)則1)修改“application.yml”文件,增加“cloud:gateway:routes”配置,字段配置作用如下:id:設(shè)置自定義的路由ID,保持唯一,名字為“dishservice-route”;uri:設(shè)置跳轉(zhuǎn)到目標(biāo)服務(wù)地址,此處設(shè)置為“l(fā)b://dishservice”,對應(yīng)格式為“l(fā)b://服務(wù)注冊名字”,意為使用的協(xié)議為“l(fā)b”,服務(wù)注冊名字為“dishservice”,Gateway將使用LoadBalancerClient通過eureka解析為實際的主機(jī)和端口,并進(jìn)行負(fù)載均衡訪問。predicates:設(shè)置路由跳轉(zhuǎn)條件,Predicate接受一個輸入?yún)?shù),返回一個布爾值結(jié)果,設(shè)置“Path=/api/dishservice/**”,意為當(dāng)訪問路徑包含“/api/dishservice/”時,跳轉(zhuǎn)到uri配置的“dishservice”服務(wù)。filters:設(shè)置過濾器規(guī)則,StripPrefix參數(shù)表示在將請求發(fā)送到下游服務(wù)之前從請求中剝離的路徑個數(shù),設(shè)置StripPrefix=2,意為當(dāng)通過Gateway網(wǎng)關(guān)向“/api/dishservice/admin/dishes/toprecommend”發(fā)出請求時,轉(zhuǎn)發(fā)到服務(wù)的實際請求為“/admin/dishes/toprecommend”。詳細(xì)代碼如下:#服務(wù)名稱,建議駝峰命名spring:application:name:gatewaycloud:gateway:routes:-id:dishservice-routeuri:lb://dishservicepredicates:-Path=/api/dishservice/**filters:-StripPrefix=22)按順序分別運(yùn)行注冊中心、菜品服務(wù)、訂單服務(wù)和網(wǎng)關(guān)服務(wù),打開Postman,在地址欄中輸入“http://localhost:8762/api/dishservice/admin/dishes/toprecommend”,可以看到訪問網(wǎng)關(guān)服務(wù)后跳轉(zhuǎn)到菜品服務(wù),結(jié)果如圖5-14所示:圖5-14驗證網(wǎng)關(guān)路由功能步驟3:自動配置路由規(guī)則步驟2中實現(xiàn)了手動配置路由轉(zhuǎn)發(fā)規(guī)則,實現(xiàn)轉(zhuǎn)發(fā)到菜品服務(wù)的功能,微服務(wù)架構(gòu)中服務(wù)較多,可以使用自動配置的方式代替手動配置的方式實現(xiàn)全部服務(wù)的轉(zhuǎn)發(fā)功能。1)修改“application.yml”文件,增加“cloud:gateway:routes:discovery:locator”配置,字段配置作用如下:enabled:設(shè)置為true,表明gateway開啟服務(wù)注冊和發(fā)現(xiàn)的功能,并且springcloudgateway自動根據(jù)服務(wù)發(fā)現(xiàn)為每一個服務(wù)創(chuàng)建了一個路由router,這個router將以服務(wù)名開頭的請求路徑轉(zhuǎn)發(fā)到對應(yīng)的服務(wù)。lowerCaseServiceId:設(shè)置為true,表明將請求路徑上的服務(wù)名配置為小寫,注冊中心注冊時將服務(wù)名默認(rèn)是大寫。詳細(xì)代碼如下:#服務(wù)名稱,建議駝峰命名spring:application:name:gatewaycloud:gateway:discovery:locator:enabled:truelowerCaseServiceId:true2)按順序分別運(yùn)行注冊中心、菜品服務(wù)、訂單服務(wù)和網(wǎng)關(guān)服務(wù),打開Postman,在地址欄中輸入“http://localhost:8762/dishservice/admin/dishes/toprecommend”,可以看到訪問網(wǎng)關(guān)服務(wù)后根據(jù)服務(wù)名跳轉(zhuǎn)到菜品服務(wù),結(jié)果如圖5-15所示:圖5-15驗證網(wǎng)關(guān)路由功能知識小結(jié)【對應(yīng)證書技能】使用SpringCloudGateway構(gòu)建網(wǎng)關(guān)服務(wù),提供核心的路由功能,為微服務(wù)架構(gòu)提供統(tǒng)一的API路由管理方式,通過配置路由信息ID、目標(biāo)URI、斷言Predicate和過濾器Filter實現(xiàn)路由根據(jù)匹配規(guī)則轉(zhuǎn)發(fā)請求。本任務(wù)知識技能點與等級證書技能的對應(yīng)關(guān)系見表5-8。任務(wù)2知識技能點對應(yīng)證書技能知識點技能點工作領(lǐng)域工作任務(wù)職業(yè)技能要求等級構(gòu)建網(wǎng)關(guān)服務(wù)使用SpringCloudGateway框架構(gòu)建網(wǎng)關(guān)服務(wù)3.高性能系統(tǒng)開發(fā)3.3Java微服務(wù)開發(fā)與部署3.3.6能夠基于SpringCloudGateway實現(xiàn)網(wǎng)關(guān)轉(zhuǎn)發(fā)與請求過濾;高級表5-8任務(wù)5知識技能點與等級證書技能對應(yīng)謝謝觀看任務(wù)6.實現(xiàn)鏈路追蹤功能任務(wù)描述本任務(wù)是使?Zipkin和Sleuth框架實現(xiàn)業(yè)務(wù)分析調(diào)?鏈路追蹤系統(tǒng),用于分析微服務(wù)架構(gòu)的服務(wù)接口問題分析、性能診斷等問題。知識準(zhǔn)備1)Sleuth框架在微服務(wù)框架中,一個由客戶端發(fā)起的請求在后端系統(tǒng)中會經(jīng)過不同的服務(wù)節(jié)點調(diào)用來協(xié)同產(chǎn)生的最后的請求結(jié)果,每一個前端請求都會形成一條復(fù)雜的分布式調(diào)用鏈路,鏈路中的任何一個環(huán)節(jié)出現(xiàn)高延時或錯誤都會引起整個請求的失敗。SpringCloudSleuth為SpringCloud實現(xiàn)了分布式跟蹤解決方案,且兼容Zipkin,結(jié)合Zipkin做鏈路跟蹤。Sleuth是一個工具,能跟蹤一個用戶請求的過程,捕獲到跟蹤數(shù)據(jù),構(gòu)建微服務(wù)的整個調(diào)用鏈的視圖,它是調(diào)試和監(jiān)控微服務(wù)的關(guān)鍵工具,可以快速發(fā)現(xiàn)錯誤根源以及監(jiān)控分析每條請求鏈路上的性能。2)Zipkin框架Zipkin是一個可視化的分布式跟蹤系統(tǒng)。它有助于收集解決服務(wù)體系結(jié)構(gòu)中的延遲問題所需的時序數(shù)據(jù)。Zipkin最初是為了在Cassandra上存儲數(shù)據(jù)而構(gòu)建的,因為Cassandra是可擴(kuò)展的,具有靈活的模式,并且在Twitter中大量使用。除了支持Cassandra,還支持ElasticSearch和MySQL。如果日志文件中有跟蹤ID,則可以直接跳至該跟蹤ID。還可以基于屬性進(jìn)行查詢,例如服務(wù),操作名稱,標(biāo)簽和持續(xù)時間,服務(wù)中花費的時間百分比以及操作是否失敗。任務(wù)實施步驟1:增加Sleuth鏈路追蹤功能1)在各個微服務(wù)項目的“pom.xml”文件添加sleuth依賴,<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId></dependency>2)啟動全部服務(wù),打開Postman,在地址欄中輸入“http://localhost:8762/orderservice/order/api/get?dishesId=1”,通過訂單服務(wù)調(diào)用菜單服務(wù),打開STS的“Console”分析Sleuth日志的結(jié)果,如圖5-16所示:圖5-16Sleuth日志功能可以看到Sleuth在日志中增加“[dishservice,8fa6395f7b567ced,42502fd383b15965]”信息用于日志追蹤,分析如下:第一個值:服務(wù)名,對應(yīng)的是的值;第二個值:TraceID,用來標(biāo)識一條請求鏈路,一條請求鏈路中包含一個TraceID;第三個值:SpanID,基本的工作單元,獲取元數(shù)據(jù)。步驟2:構(gòu)建Zipkin服務(wù)端通過Sleuth框架收集到日志鏈路信息,并不方便開發(fā)人員查看分析,通過引入Zipkin框架來實現(xiàn)鏈路追蹤的可視化WEB界面分析調(diào)用鏈路耗時等情況。1)啟動Zipkin服務(wù)端,下載提供的“zipkin-server-2.12.9-exec.jar”文件,執(zhí)行“java-jarzipkin-server-2.12.9-exec.jar”命令,啟動Zipkin服務(wù)端,打開瀏覽器訪問“:9411/”,結(jié)果如圖

5-17所示:圖5-17Zipkin服務(wù)步驟3:服務(wù)中增加Zipkin客戶端在網(wǎng)關(guān)服務(wù)、菜品服務(wù)和訂單服務(wù)的“pom.xml”文件中添加Zipkin依賴<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId></dependency>步驟4:配置Zipkin服務(wù)端地址在網(wǎng)關(guān)服務(wù)、菜品服務(wù)和訂單服務(wù)的“application.yml”文件中配置zipkin和sleuth,注意與application是同層級,通過“zipkin:base-url”設(shè)置指向Zipkin服務(wù)端地址和“sleuth:sampler:probability”設(shè)置采樣百分比,設(shè)為1代表100%采樣,即記錄全部的sleuth信息。#服務(wù)名稱,建議駝峰命名spring:application:name:dishservicezipkin:base-url::9411/discovery-client-enabled:falsesleuth:sampler:probability:1.0步驟5:驗證可視化的鏈路追蹤系統(tǒng)1)啟動全部服務(wù),打開Postman,在地址欄中輸入“http://localhost:8762/orderservice/order/api/get?dishesId=1”。2)在瀏覽器中訪問“:9411/”查看鏈路追蹤系統(tǒng),可以看到調(diào)用的服務(wù)名,結(jié)果如圖5-18所示:圖5-18查看鏈路追蹤系統(tǒng)圖

5-19查看鏈路耗時3)選擇“orderservice”服務(wù),單擊“查詢”按鈕,可以看到鏈路耗時情況,結(jié)果如下圖5-19所示:3)選擇“orderservice”服務(wù),單擊“查詢”按鈕,可以看到鏈路耗時情況,結(jié)果如下圖5-19所示:圖5-20查看鏈路詳情知識小結(jié)【對應(yīng)證書技能】微服務(wù)架構(gòu)系統(tǒng)服務(wù)之間調(diào)用很多次后端服務(wù)才能完成特定功能,當(dāng)整個請求變慢或不可用時,很難得知該請求是由哪個后端服務(wù)引起的,這時就需要解決如何快讀定位服務(wù)故障點,本任務(wù)就是使用Sleuth結(jié)合Zipkin構(gòu)建調(diào)?鏈路追蹤功能,可以很方便的理清服務(wù)間的調(diào)用關(guān)系,看出每個采樣請求的耗時,分析出哪些服務(wù)調(diào)用比較耗時,然后優(yōu)化鏈路。本任務(wù)知識技能點與等級證書技能的對應(yīng)關(guān)系見表5-9。任務(wù)2知識技能點對應(yīng)證書技能知識點技能點工作領(lǐng)域工作任務(wù)職業(yè)技能要求等級開發(fā)服務(wù)間調(diào)用的分析追蹤系統(tǒng);使用Sleuth結(jié)合Zipkin構(gòu)建鏈路追蹤系統(tǒng),分析服務(wù)提供者與消費者鏈路;3.高性能系統(tǒng)開發(fā)3.3Java微服務(wù)開發(fā)與部署3.3.5能夠基于Eruka/Consul服務(wù)注冊與發(fā)現(xiàn)中心開發(fā)實現(xiàn)服務(wù)提供者與消費者;高級表5-9任務(wù)6知識技能點與等級證書技能對應(yīng)謝謝觀看任務(wù)7.完成各個服務(wù)的Docker打包任務(wù)描述本任務(wù)是將注冊中心、網(wǎng)關(guān)、菜品和訂單服務(wù)使用Docker容器打包,以方便實現(xiàn)快速部署。知識準(zhǔn)備1)docker-maven-plugin插件在項目打包發(fā)布的持續(xù)集成過程中,項目常常使用Maven框架進(jìn)行編譯打包,并生成鏡像,通過鏡像部署上線,可以極大提升系統(tǒng)上線效率,同時能夠快速動態(tài)擴(kuò)容,快速回滾等需求。Spotify公司開發(fā)的docker-maven-plugin插件就是通過簡單的配置,在Maven工程中自動生成鏡像并推送到Docker倉庫中。任務(wù)實施步驟1:配置遠(yuǎn)程連接Docker服務(wù)1)打開STS工具,菜單欄單擊選擇“Window->ShowView->Other->Docker->DockerExplore”,單擊“open”按鈕打開Docker視圖,在該視圖下單擊建立DockerConnection,輸入已開啟遠(yuǎn)程連接的Docker服務(wù)端地址(項目四中使用的Docker服務(wù)),單擊“Finish”按鈕,結(jié)果如圖5-21所示:圖5-21配置Docker連接2)連接成功,可以看到當(dāng)前Dockerserver中已有鏡像和容器,結(jié)果如圖5-22所示:圖5-22DockerExplore視圖步驟2:構(gòu)建服務(wù)注冊中心的Docker鏡像1)修改服務(wù)注冊中心的“pom.xml”文件,增加Spotify的docker-maven-plugin插件,提供使用maven插件構(gòu)建docker鏡像的功能。<build><finalName>eurekaserver</finalName><plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.3.6</version> <configuration> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin></plugins></build>2)在項目根目錄下,創(chuàng)建用來構(gòu)建鏡像的Dockerfile文件,編寫命令如下:###基礎(chǔ)鏡像,使用alpine操作系統(tǒng),openjkd使用8u201FROMopenjdk:8u201-jdk-alpine3.9#系統(tǒng)編碼ENVLANG=C.UTF-8LC_ALL=C.UTF-8#聲明一個掛載點,容器內(nèi)此路徑會對應(yīng)宿主機(jī)的某個文件夾VOLUME/tmp#構(gòu)建成功的jar文件復(fù)制到鏡像內(nèi),名字改成app.jarADDtarget/eurekaserver.jarapp.jar#啟動容器時的進(jìn)程ENTRYPOINT["java","-jar","/app.jar"]#暴露鏡像端?EXPOSE87613)使用Maven打包服務(wù)注冊中心,右擊“ordersys_eurekaserver”項目,選擇“RunAs->MavenInstall”,構(gòu)建成功之后,可以看到“target”目錄下生成eurekaserver.jar文件,結(jié)果如圖5-23所示:圖5-23Maven打包服務(wù)注冊中心4)單擊“啟動”按鈕后的三角號,選擇“RunConfiguration...”,如下圖5-24所示:圖5-24RunConfiguration過程5)選擇“BuildDockerImage”,右擊選擇“NewConfiguration”,過程如圖5-25所示:圖5-25BuildDockerImage6)配置構(gòu)建Docker鏡像的服務(wù)端,其中Name為“eurekaserver”,DockerConnection選擇步驟一中配置的docker服務(wù)端“docker云”,BuildContextPath選擇“\ordersys_eurekaserver”目錄,Repositoryname設(shè)置為“ordersys_eurekaserver”,Dockerfilename設(shè)置為前面創(chuàng)建的“Dockerfile”文件,過程如圖5-26所示:圖5-26配置服務(wù)注冊中心構(gòu)建參數(shù)7)單擊“Run”按鈕,顯示構(gòu)建成功,運(yùn)行結(jié)果如下圖所示:8)單擊選擇“DockerExplorer”視圖,可以看到“ordersys_eurekaserver”鏡像被成功創(chuàng)建,結(jié)果如圖5-27所示:圖5-27服務(wù)注冊中心鏡像上傳至倉庫步驟3:構(gòu)建菜品服務(wù)的Docker鏡像1)修改菜品服務(wù)的“pom.xml”文件,增加Spotify的docker-maven-plugin插件,代碼如下:<build><finalName>dishservice</finalName><plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.3.6</version> <configuration> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin></plugins></build>2)修改菜品服務(wù)的“application.yml”文件,修改注冊中心指向DockerServer容器:#指向注冊中心地址eureka:client:serviceUrl:defaultZone:31:8761/eureka/3)在項目根目錄下,創(chuàng)建用來構(gòu)建鏡像的Dockerfile文件,編寫命令如下:###基礎(chǔ)鏡像,使用alpine操作系統(tǒng),openjkd使用8u201FROMopenjdk:8u201-jdk-alpine3.9#系統(tǒng)編碼ENVLANG=C.UTF-8LC_ALL=C.UTF-8#聲明一個掛載點,容器內(nèi)此路徑會對應(yīng)宿主機(jī)的某個文件夾VOLUME/tmp#構(gòu)建成功的jar文件復(fù)制到鏡像內(nèi),名字改成app.jarADDtarget/dishservice.jarapp.jar#啟動容器時的進(jìn)程ENTRYPOINT["java","-jar","/app.jar"]#暴露鏡像端?EXPOSE87714)使用Maven打包菜品服務(wù),右擊“ordersys_dishservice”項目,選擇“RunAs->MavenInstall”,構(gòu)建成功之后,可以看到“target”目錄下生成dishservice.jar文件,結(jié)果如圖5-28所示:圖5-28Maven打包菜品服務(wù)5)配置構(gòu)建Docker鏡像的服務(wù)端,其中Name為“dishservice”,DockerConnection選擇步驟一中配置的docker服務(wù)端“docker云”,BuildContextPath選擇“\ordersys_eurekaserver”目錄,Repositoryname設(shè)置為“ordersys_dishservice”,Dockerfilename設(shè)置為前面創(chuàng)建的“Dockerfile”文件,過程如圖5-29所示:圖5-29配置菜品服務(wù)構(gòu)建參數(shù)6)單擊“Run”按鈕,運(yùn)行完成后選擇“DockerExplorer”視圖,可以看到“ordersys_dishservice”鏡像被成功創(chuàng)建,結(jié)果如圖5-30所示:圖5-30菜品鏡像上傳至倉庫拓展練習(xí)構(gòu)建其他服務(wù)的Docker鏡像參照步驟三,分別構(gòu)建訂單服務(wù)和網(wǎng)關(guān)服務(wù)的Docker鏡像。知識小結(jié)【對應(yīng)證書技能】使用Spotify公司開發(fā)的docker-maven-plugin插件將SpringBoot項目自動構(gòu)建Docker鏡像,使用該插件構(gòu)建Docker鏡像,需要有一個安裝好的Docker運(yùn)行環(huán)境,本案例中使用的CentOS系統(tǒng)下安裝的Docker服務(wù),構(gòu)建鏡像的核心任務(wù)分為三個步驟:1)在pom.xml中引入dockerfile-maven-plugin插件,并配置該插件;2)編寫Dockerfile文件;3)構(gòu)建Docker鏡像并推送到Docker倉庫中。本任務(wù)知識技能點與等級證書技能的對應(yīng)關(guān)系見表5-10。任務(wù)2知識技能點對應(yīng)證書技能知識點技能點工作領(lǐng)域工作任務(wù)職業(yè)技能要求等級JAVA項目構(gòu)建Docker鏡像將SpringBoot項目構(gòu)建成Docker鏡像1.容器管理1.2容器鏡像制作1.2.1能使用Dockerfile來定制一個構(gòu)建鏡像;高級表5-10任務(wù)7知識技能點與等級證書技能對應(yīng)謝謝觀看任務(wù)8.完成系統(tǒng)的容器化部署任務(wù)描述本任務(wù)是將鏈路追蹤系統(tǒng)、服務(wù)注冊中心、網(wǎng)關(guān)、菜品和訂單服務(wù)實現(xiàn)容器化部署。知識準(zhǔn)備1.容器化部署技術(shù)容器化部署是指將應(yīng)用整合到容器中并且運(yùn)行起來的這個過程,容器能夠簡化應(yīng)用的構(gòu)建、部署和運(yùn)行過程。這個過程簡單地說,就是將Java項目和依賴包打成一個帶有操作指令的鏡像文件,然后在服務(wù)器創(chuàng)建一個容器,讓鏡像在容器內(nèi)運(yùn)行,從而實現(xiàn)項目的部署。

針對SpringBoot項目的容器化部署過程主要有以下幾個步驟:(1)項目創(chuàng)建Dockerfile文件;(2)打包并構(gòu)建項目的Docker鏡像;(3)將項目鏡像上傳到Docker倉庫;(4)使用Dockerrun命令運(yùn)行項目容器完成部署;任務(wù)實施步驟1:使用Docker容器部署Zipkin服務(wù)端1)使用Putty登錄到CentOS服務(wù)器,執(zhí)行命令“dockerpullopenzipkin/zipkin:latest”拉取Zipkin鏡像,結(jié)果如圖5-31所示:圖5-31拉取Zipkin鏡像2)執(zhí)行“dockerimages”命令查看鏡像,結(jié)果如圖5-32所示:圖5-32拉取Zipkin鏡像3)執(zhí)行“dockerrun--nameordersys-zipkin-d-p9411:94119b4acc3eb019”命令啟動Zipkin服務(wù)器,其中“dockerrun--nameordersys-zipkin-d-p9411:94119b4acc3eb019”是上面查詢到的zipkin的鏡像ID,另外如果使用的是華為云等云服務(wù)器,記得配置網(wǎng)絡(luò)安全組開放9411端口,結(jié)果如圖5-33所示:圖5-33運(yùn)行Zipkin容器4)訪問Zipkin,打開瀏覽器訪問“http://公?ip:9411/zipkin/”,結(jié)果如圖5-34所示:圖5-34訪問Zipkin5)修改全部服務(wù)的“application.yml”文件,將zipkin服務(wù)端地址指向“31:9411/zipkin/”,否則無法實現(xiàn)鏈路追蹤。zipkin:base-url:31:9411/步驟2:使用Docker容器部署服務(wù)中心1)執(zhí)行“dockerimages”命令查看鏡像,結(jié)果如圖5-35所示:圖5-35查看鏡像2)執(zhí)行“dockerrun--nameordersys_eurekaserver-d-p8761:8761916ccf8e36b1”命令啟動服務(wù)注冊中心,結(jié)果如圖5-36所示:圖5-36啟動服務(wù)注冊中心3)打開瀏覽器訪問“31:8761/”,結(jié)果如圖5-37所示:圖5-37查看服務(wù)注冊中心4)修改全部服務(wù)的“application.yml”文件,將注冊中心地址指向“31:8761/eureka/”,然后重新構(gòu)建鏡像。#指向注冊中心地址eureka:client:serviceUrl:defaultZone:31:8761/eureka/instance:

#以IP地址注冊到服務(wù)中心,相互注冊使用IP地址prefer-ip-address:true步驟3:使用Docker容器部署菜品服務(wù)1)執(zhí)行“dockerimages”命令查看鏡像,結(jié)果如圖5-38所示:圖5-38查看鏡像2)執(zhí)行“dockerrun--nameordersys_dishservice-d-p8771:8771e8a1063ddf23”命令啟動菜品服務(wù),其中e8a1063ddf23為ordersys_dishservice的鏡像ID。圖5-39啟動菜品服務(wù)3)打開Postman訪問接口“http://31:8771/admin/dishes/toprecommend”,成功返回數(shù)據(jù),結(jié)果如圖5-40所示:圖5-40驗證菜品服務(wù)4)打開瀏覽器訪問“31:8761/”,看到“DISHSERVICE”已經(jīng)注冊到注冊中心,結(jié)果如圖5-41所示:圖5-41菜品注冊到注冊中心步驟4:使用Docker容器部署網(wǎng)關(guān)服1)執(zhí)行“dockerimages”命令查看鏡像,結(jié)果如圖5-42所示:圖5-42查看鏡像2)執(zhí)行“dockerrun--nameordersys_gateway-d-p8762:876208321d099afc”命令啟動菜品服務(wù),其中08321d099afc為ordersys_gateway的鏡像ID,結(jié)果如圖5-43所示:圖5-43啟動菜品服務(wù)3)打開瀏覽器訪問“31:8761/”,看到“GATEWAY”已經(jīng)注冊到注冊中心,結(jié)果如圖5-44所示:圖5-44啟動菜品服務(wù)4)打開Postman訪問接口“http://31:8762/dishservice/admin/dishes/toprecommend”,成功返回數(shù)據(jù)代表網(wǎng)關(guān)部署成功,結(jié)果如圖5-45所示:圖5-45網(wǎng)關(guān)中轉(zhuǎn)到菜品服務(wù)5)打開瀏覽器訪問“31:9411/zipkin/”鏈路追蹤系統(tǒng),查詢“serviceName=dishservice”,結(jié)果如圖5-46所示:圖5-46驗證網(wǎng)關(guān)服務(wù)拓展練習(xí)使用Docker容器部署訂單服務(wù)參照步驟三,使用Docker容器部署訂單服務(wù),并查看注冊中心是否成功注冊。知識小結(jié)【對應(yīng)證書技能】本任務(wù)主要是實現(xiàn)兩種應(yīng)用服務(wù)的部署,一種是Zipkin第三方服務(wù)的部署,另一種是餐廳點餐系統(tǒng)應(yīng)用服務(wù)的部署。1)第三方服務(wù)服務(wù)的部署,如Zipkin服務(wù)部署,首先使用dockerpull命令拉取Zipkin鏡像,然后使用dockerrun命令運(yùn)行Zipkin容器提供服務(wù)。2)餐廳點餐系統(tǒng)應(yīng)用服務(wù)的部署,直接使用dockerrun命令運(yùn)行docker倉庫中的鏡像即可。注意在運(yùn)行容器的時候使用“-p”參數(shù)設(shè)置容器端口映射宿主機(jī)端口。本任務(wù)知識技能點與等級證書技能的對應(yīng)關(guān)系見表5-11。表5-11任務(wù)8知識技能點與等級證書技能對應(yīng)任務(wù)2知識技能點對應(yīng)證書技能知識點技能點工作領(lǐng)域工作任務(wù)職業(yè)技能要求等級Docker基礎(chǔ)操作掌握Docker搜索、拉取、配置網(wǎng)絡(luò)端口以及運(yùn)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論