版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、手把手教你用Spring Cloud和Docker構(gòu)建微服務(wù)本博文主要向大家介紹如何使用Spring Cloud和Docker構(gòu)建微服務(wù)平臺。什么是Spring Cloud?Spring Cloud 是Pivotal提供的用于簡化分布式系統(tǒng)構(gòu)建的工具集。Spring Cloud引入了云平臺連接器(Cloud Connector)和服務(wù)連接器(Service Connector)的概念。云平臺連接器是一個接口,需要由云平臺提供者進行實現(xiàn),以便庫中的其他模塊可以與該云平臺協(xié)同工作。Spring BootSpring Cloud最重要的一點是它可以和Spring Boot一起工作,Spring Bo
2、ot可以幫助開發(fā)者更容易地創(chuàng)建基于Spring的應(yīng)用程序和服務(wù)。從Spring Boot項目名稱中的Boot就可以看出來,Spring Boot的作用在于創(chuàng)建和啟動新的基于Spring框架的項目。Spring Boot會選擇最適合的Spring子項目和第三方開源庫進行整合。大部分Spring Boot應(yīng)用只需要非常少的配置就可以快速運行起來。Spring Boot包含的特性如下:· 創(chuàng)建可以獨立運行的Spring應(yīng)用。 · 直接嵌入Tomcat或Jetty服務(wù)器,不需要部署WAR文件。 · 提供推薦的基礎(chǔ)POM文件來簡化Apache Maven配置。 ·
3、 盡可能的根據(jù)項目依賴來自動配置Spring框架。 · 提供可以直接在生產(chǎn)環(huán)境中使用的功能,如性能指標(biāo)、應(yīng)用信息和應(yīng)用健康檢查。 · 沒有代碼生成,也沒有XML配置文件。 服務(wù)發(fā)現(xiàn)和智能路由每一個服務(wù)都含有一個特定意義的微服務(wù)架構(gòu)。當(dāng)你在Spring Cloud上構(gòu)建微服務(wù)架構(gòu)時,這里有幾個基本概念需要首先澄清下。首先,你需要要先創(chuàng)建Configuration Service和Discovery Service兩個基礎(chǔ)服務(wù)。如下圖所示:上面的圖片說明了四個微服務(wù)以及各個服務(wù)之間的依賴關(guān)系。Configuration service處于最頂端,黃色標(biāo)識,而且被其它微服務(wù)所依賴
4、。Discovery service處于最低端,藍色標(biāo)識,同時也被其它服務(wù)所依賴。綠色標(biāo)識的兩個微服務(wù)是我們本系列博文中用到的兩個應(yīng)用案例:電影和觀影建議。Configuration ServiceConfiguration Service在微服務(wù)架構(gòu)中是一個非常重要的組件。如12要素應(yīng)用理論所說, 微服務(wù)應(yīng)用的配置應(yīng)該存儲在環(huán)境中,而不是本地項目中。Configuration service(配置服務(wù))是一個必不可少的基礎(chǔ)組件的原因是因為它可以對所有通過點對點和檢索的基礎(chǔ)服務(wù)進行服務(wù)管理。假設(shè)我們有多個部署環(huán)境。比如我們有一個臨時環(huán)境和一個生產(chǎn)環(huán)境,針對每個環(huán)境的配置將會是不同的。每一個co
5、nfiguration service 將會由一個獨立的Git倉庫來存放環(huán)境配置。沒有其它環(huán)境能夠訪問到這個配置倉庫,它只是提供該環(huán)境中運行的配置服務(wù)罷了。當(dāng)Configuration service啟動后,它將會指向那些根據(jù)配置文件配置的路徑并啟動對應(yīng)服務(wù)。每一個微服務(wù)通過讀取自己配置文件中的具體環(huán)境來運行。在這一過程中,配置是通過版本管理來進行的內(nèi)部和集中化管理,更改配置不需要重啟服務(wù)。通過Spring Cloud提供的服務(wù)終端,你可以更改環(huán)境配置,并向Discovery service(發(fā)現(xiàn)服務(wù))發(fā)送一個刷新信號,所有的用戶都會收到新的配置通知。Discovery ServiceDisc
6、overy Service(發(fā)現(xiàn)服務(wù))是另一個重要的微服務(wù)架構(gòu)的組件。Discovery Service管理運行在容器中的眾多服務(wù)實例,而這些實例工作在集群環(huán)境下。在這些應(yīng)用中,我們使用客戶端的方式稱之為從服務(wù)到服務(wù)。舉個例子,我使用Spring Cloud Feign ,這是一個基于Restful風(fēng)格的微服務(wù)提供的客戶端開源項目,它是從Netflix OSS project項目中派生出來的。1. FeignClient("movie") 2. public interface MovieClient 3. Request
7、Mapping(method = RequestMethod.GET, value = "/movies") 4. PagedResources findAll(); 5. 6. RequestMapping(method = RequestMethod.GET, value = "/movies/id") 7. Movie findById(RequestParam("id"
8、;) String id); 8. 9. RequestMapping(method = RequestMethod.POST, value = "/movies", 10. produces = MediaType.APPLICATION_JSON_VALUE) 11. void createMovie(RequestBody Movie movie); 12.
9、160;在上面的例子中,我創(chuàng)建了一個Feign 客戶端,并映射了一個REST API方法來暴露電影服務(wù)。使用FeignClient注解,可以聲明我想要為movie微服務(wù)而創(chuàng)建的客戶端API。接下來我聲明了一個我想要實現(xiàn)的服務(wù)映射。通過在方法上聲明一個URL規(guī)則來描述一個REST API的路由規(guī)則。更令人興奮的是,這一切在Spring Cloud中都很容易,我所要做的僅僅是知道service ID來創(chuàng)建我的Feign 客戶端。服務(wù)的URL地址在運行時環(huán)境是自動配置的,因為每一個在集群中的微服務(wù)將會在啟動時通過綁定serviceid的方式來進行注冊。微服務(wù)架構(gòu)中的其它服務(wù),也是通過上面提到的方式運
10、行。我只需要知道進行通訊服務(wù)的serviceid,所有的操作都是通過Spring自動綁定的。API GatewayAPI Gateway 服務(wù)是Spring Cloud的另一個重要組件(關(guān)于它的介紹可以閱讀本篇文章)。它可以用來管理集群服務(wù)中的領(lǐng)域?qū)嶓w。下圖的綠色六邊形是我們提供的數(shù)據(jù)驅(qū)動服務(wù),主要用來管理自己的實體類和數(shù)據(jù)庫。通過添加API Gateway服務(wù),我們可以為通過下面綠顏色的服務(wù)為每一個API路由創(chuàng)建一個代理暴露接口。假設(shè)推薦服務(wù)和電影服務(wù)都暴露他們自己的REST API在自己管理的域?qū)嶓w上。API gataway通過discovery service和從其它服務(wù)注入的基于代理路
11、由的 API方法。通過這種方式,包括推薦服務(wù)和電影服務(wù)將擁有一個完整定義的路由,通過暴露的REST API獲得本地的微服務(wù)。API Gateway將會重定義路由請求到服務(wù)實例,這些請求都是基于HTTP的。示例項目我已經(jīng)在GitHub上創(chuàng)建了一個實例項目: Cloud構(gòu)建實際的微服務(wù)架構(gòu)?;靖拍?· 使用Docker進行集成測試 · 混合持久化 · 微服務(wù)架構(gòu) · 服務(wù)發(fā)現(xiàn) · API網(wǎng)關(guān) Docker使用Docker對每一個服務(wù)進行構(gòu)建和部署。使用Docker Compose在一個開發(fā)機上進行端到端的集成測試?;旌铣志没旌铣志没鋵嵕褪钦f使
12、用多種數(shù)據(jù)庫來存儲。不同的微服務(wù)實例都會使用它們自己的數(shù)據(jù)庫,并通過REST服務(wù)或者消息總線來通信,舉個例子,你可以使用基于以下數(shù)據(jù)庫來構(gòu)建微服務(wù):· Neo4j(圖形化) · MongoDB(文檔化) · MySQL(關(guān)聯(lián)) 微服務(wù)架構(gòu)這個例子演示了如何使用微服務(wù)創(chuàng)建一個新的應(yīng)用。由于在項目中的每一個微服務(wù)只有一個單一的父項目。開發(fā)者為此得到的收益是可以在本機上運行和開發(fā)每一個微服務(wù)。添加一個新的微服務(wù)非常簡單,當(dāng)發(fā)現(xiàn)微服務(wù)時將會自動發(fā)現(xiàn)運行時的集群環(huán)境上。Service Discovery項目中包含兩個發(fā)現(xiàn)服務(wù),一個在Netflix Eureka,另一個使用了
13、Consul from Hashicorp。多種發(fā)現(xiàn)服務(wù)提供了多種選擇,一個是使用(Consul)來做DNS服務(wù)集群,另一個是(Consul)基于代理的API 網(wǎng)關(guān)。API 網(wǎng)關(guān)每一個微服務(wù)都關(guān)聯(lián)Eureka,在整個集群中檢索API路由。使用這個策略,每一個在集群上運行的微服務(wù)只需要通過一個共同的API網(wǎng)關(guān)進行負載均衡和暴露接口,每一個服務(wù)也會自動發(fā)現(xiàn)并將路由請求轉(zhuǎn)發(fā)到自己的路由服務(wù)中。這個代理技術(shù)有助于開發(fā)用戶界面,作為平臺完整的 API通過自己的主機映射為代理服務(wù)。Docker 實例下面的實例將會通過Maven來構(gòu)建,使用Docker為每一個微服務(wù)構(gòu)建容器鏡像。我們可以很優(yōu)雅的使用Dock
14、er Compose在我們自己的主機上搭建全部的微服務(wù)集群。開始構(gòu)建在這之前,請先移步至項目的GitHub 倉庫。克隆或者fork這個項目并且把源碼下載到自己的電腦上。下載完畢后,你需要使用Maven和Docker來編譯和構(gòu)建本地的容器鏡像。下載Docker首先,如果你還沒有Docker請先下載它??梢愿S這個指南來獲取Docker:當(dāng)然你也需要安裝Docker Compose(https/環(huán)境要求能夠運行實例程序,需要在你的開發(fā)機上安裝下面的軟件:· Maven 3 · Java 8 · Docker · Docker Compose 構(gòu)建項目通過命令
15、行方式來構(gòu)建當(dāng)前項目,在項目的根目錄中運行如下的命令:1. $ mvn clean install 項目將會根據(jù)pom.xml中的每一個項目聲明中下載相應(yīng)的依賴jar包。每一個服務(wù)都將會被構(gòu)建,同時Maven的Docker插件將會自動從本地Docker Registry中構(gòu)建每一個容器鏡像。Docker將會在構(gòu)建成功后,根據(jù)命令行運行mvn clean install來清除相應(yīng)的資源。在項目成功構(gòu)建后,你將會看到如下的輸出:通過Docker compose 啟動集群現(xiàn)在每一個鏡像都成功構(gòu)建完畢,我們使用Docker Compose來加速啟動我們的集群。我
16、已經(jīng)將Docker Compose的yaml文件包含進了項目中,大家可以從GitHub上獲取。現(xiàn)在我們通過下面的命令行啟動微服務(wù)集群:1. $ docker-compose up 如果一切配置都是正確的,每一個容器鏡像將會通過在Docker上的虛擬容器和自動發(fā)現(xiàn)的網(wǎng)絡(luò)服務(wù)來運行。當(dāng)他們開始順序啟動時,你將會看到一系列的日志輸出。這可能需要一段時間來完成,取決于運行你實例程序的機器性能。一旦容器啟動成功,你將會通過Eureka主機看到通過Discovery service注冊上來的應(yīng)用服務(wù)。通過命令行終端復(fù)制粘貼下面的命令到Docker中定義的$DOCKER_HOS
17、T環(huán)境變量中。1. $ open $(echo "$(echo $DOCKER_HOST)"| 2. sed 's/tcp:/http:/g'| 3. sed 's/0-94,/8761/g'| 4. sed 's/"/g') 如果Eureka正確的啟動,瀏覽器將會啟動并打開Eureka服務(wù)的儀表盤,如下圖所示:我們將會看到每一個正在運行的服務(wù)實例和狀態(tài)。通過下面的命令來獲取數(shù)據(jù)驅(qū)動服務(wù),例如 movie 服
18、務(wù)。1. $ open $(echo "$(echo $DOCKER_HOST)/movie"| 2. sed 's/tcp:/http:/g'| 3. sed 's/0-94,/10000/g'| 4.
19、 sed 's/"/g') 這個命令將會訪問根據(jù)導(dǎo)航網(wǎng)關(guān)終端提供的代理方式訪問movie服務(wù)的REST API終端。這些REST API使用 HATEOAS 來配置,它是一個通過內(nèi)嵌鏈接的方式支持自動發(fā)現(xiàn)服務(wù)的接口。1. 2. "_links" : 3. "self" : 4. "href" : "htt
20、p:/03:10000/movie" 5. , 6. "resume" : 7. "href" : "03:10000/movie/resume" 8. , 9. "pause" : 10. "href" : "http:/19
21、03:10000/movie/pause" 11. , 12. "restart" : 13. "href" : "03:10000/movie/restart" 14. , 15. "metrics" : 16. "href" : &quo
22、t;03:10000/movie/metrics" 17. , 18. "env" : 19. "href" : "03:10000/movie/env" 20. , 21. "href" : "03:100
23、00/movie/env" 22. , 23. "archaius" : 24. "href" : "03:10000/movie/archaius" 25. , 26. "beans" : 27. "href" : "http:/192.
24、168.59.103:10000/movie/beans" 28. , 29. "configprops" : 30. "href" : "03:10000/movie/configprops" 31. , 32. "trace" : 33. "href" :
25、"03:10000/movie/trace" 34. , 35. "info" : 36. "href" : "03:10000/movie/info" 37. , 38. "health" : 39. "href" :
26、60;"03:10000/movie/health" 40. , 41. "hystrix.stream" : 42. "href" : "03:10000/movie/hystrix.stream" 43. , 44. "routes" : 45. "href" : "03:10000/movie/routes" 46. , 47. "dump" : 48. "href" : "03:10000/movie/dump" 49. , 50. "refresh" : 51. &
溫馨提示
- 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025教師公寓出租合同樣本
- 2025車輛承包合同范本
- 電信詐騙的分析與對策
- 科技節(jié)慶活動的多元策劃與實施經(jīng)驗
- 趣味數(shù)學(xué)課堂寓教于樂的秘密武器
- 2024年智慧物流投資申請報告
- 2024年農(nóng)業(yè)運輸機械項目資金籌措計劃書代可行性研究報告
- 二零二五年度酒店客房預(yù)訂取消退款合同4篇
- 二零二五年度創(chuàng)業(yè)型企業(yè)環(huán)保設(shè)施改造升級與合規(guī)審查合同4篇
- 2025年北師大版九年級生物上冊階段測試試卷
- 2025年上半年江蘇連云港灌云縣招聘“鄉(xiāng)村振興專干”16人易考易錯模擬試題(共500題)試卷后附參考答案
- DB3301T 0382-2022 公共資源交易開評標(biāo)數(shù)字見證服務(wù)規(guī)范
- 人教版2024-2025學(xué)年八年級上學(xué)期數(shù)學(xué)期末壓軸題練習(xí)
- 江蘇省無錫市2023-2024學(xué)年八年級上學(xué)期期末數(shù)學(xué)試題(原卷版)
- 俄語版:中國文化概論之中國的傳統(tǒng)節(jié)日
- 2022年湖南省公務(wù)員錄用考試《申論》真題(縣鄉(xiāng)卷)及答案解析
- 婦科一病一品護理匯報
- 哪吒之魔童降世
- 2022年上海市各區(qū)中考一模語文試卷及答案
- 2024年全國統(tǒng)一高考數(shù)學(xué)試卷(新高考Ⅱ)含答案
- 我國無菌包裝行業(yè)消費量已超千億包-下游需求仍存擴容潛力
評論
0/150
提交評論