微服務(wù)開發(fā)手冊_第1頁
微服務(wù)開發(fā)手冊_第2頁
微服務(wù)開發(fā)手冊_第3頁
微服務(wù)開發(fā)手冊_第4頁
微服務(wù)開發(fā)手冊_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、微服務(wù)開發(fā)手冊1開發(fā)說明所有服務(wù)均基于springboot框架開發(fā)。 springboot內(nèi)嵌了 tomcat 服務(wù)器, 無需生成 war 包,并簡化了maven配置,能夠讓開發(fā)者快速入手spring的開發(fā)。服務(wù)的接口定義需嚴(yán)格符合restful規(guī)范。 rest規(guī)范參考第 2 節(jié)所有服務(wù)都需要在注冊服務(wù)上注冊,否則不能被其他服務(wù)所調(diào)用。同時平臺也能夠?qū)崟r監(jiān)測服務(wù)的狀態(tài),能夠及時預(yù)警及調(diào)度資源。所有服務(wù)的配置信息統(tǒng)一保存于gitlab上,并通過配置服務(wù)獲取配置。對數(shù)據(jù)庫的操作統(tǒng)一采用mybatis 框架。 mybatis 是個支持普通sql查詢,和高級映射的優(yōu)秀框架。 springboot也提供

2、了 mybatis 的集成方案, 可以很快捷地整合mybatis 到項(xiàng)目中。包名約定:所有包均以com.drht.服務(wù)名為父包名所有項(xiàng)目基于jdk1.8來開發(fā)。項(xiàng)目的管理與構(gòu)建采用maven ,代碼統(tǒng)一托管于gitlab倉庫。2restapi接口規(guī)范springboot接口設(shè)計需符合restful風(fēng)格。在 restful 架構(gòu)中,每個網(wǎng)址代表一種資源( resource ),所以網(wǎng)址中不能有動詞,只能有名詞,而且所用的名詞往往與數(shù)據(jù)庫的表格名對應(yīng)。而客戶端要執(zhí)行某種類型的操作,需要根據(jù) http的操作協(xié)議來決定。 http提供了常用的幾種操作,如下表:動作說明get (select )從服務(wù)器

3、取出資源(一項(xiàng)或多項(xiàng))post (create )在服務(wù)器新建一個資源。put (update )在服務(wù)器更新資源 (客戶端提供改變后的完整資源)。patch (update )在服務(wù)器更新資源 (客戶端提供改變的屬性)。delete (delete )從服務(wù)器刪除資源。對數(shù)據(jù)庫的增刪改查操作,應(yīng)該嚴(yán)格遵守上面定義的五種http動作。對于更新動作,參數(shù)通過requestbody來傳遞,格式為json 。服務(wù)端返回數(shù)據(jù)格式也均為 json 。服務(wù)端返回數(shù)據(jù)對象約定:publicclassunifyinfoprivateintcode;/返回代碼, 1:成功, 0:失敗privatestringm

4、essage;/返回信息提示privatestringprompt;/privatestringpath;/一般用于錯誤時的跳轉(zhuǎn)路徑privatehashmapattribute;/一般用于查詢時的返回數(shù)據(jù)內(nèi)容springboot會自動將符合javabean 格式的對象轉(zhuǎn)換為json 格式數(shù)據(jù)返回。示例:客 戶 端 請求請求參數(shù)服務(wù)端返回數(shù)據(jù)說明get/users code:1,message:查 詢成功,prompt:,path:,users: 查 詢所 有用戶get/users/id code:1,message:查 詢成功,prompt:,path:,users: 查 詢指 定id 的用

5、戶post/users 創(chuàng) 建一 個用戶put/userscode:1,message:創(chuàng) 建更 新/id 用戶成功,prompt:,path:,result: 某 用戶 信息patch/users/id code:1,message:更 新成功,prompt:,path:,result: 更 新某 用戶 指定 字段delete/users/id code:1,message:刪 除成功,prompt:,path:,result: 刪 除指 定用戶而對于登錄、登出操作,可以理解為登錄是創(chuàng)建token, 登出是刪除 token, 所以可以用 post 和 delete 來定義這兩種接口。刷新to

6、ken 是更新操作所以用put 。3配置文件管理所有服務(wù)的配置文檔均保存于gitlab上,并通過配置服務(wù)config-service來獲取配置。每個服務(wù)在gitlab均保存一份以服務(wù)id 命名的 properties文件。以服務(wù) spring-boot-demo為例,其在 gitlab上的配置文件為perties 在 perties中通常配置該服務(wù)的啟動端口、數(shù)據(jù)庫連接參數(shù)等信息。當(dāng)該文件有更新并push 到 gitlab后,配置服務(wù)會自動通知客戶端服務(wù)更新配置信息。關(guān)鍵配置:在主程序中需要訪問配置文件的類名上加上

7、注解:refreshscope,如果沒有該注解,配置服務(wù)將不能主動通知客戶端服務(wù)更新配置。如下:refreshscoperestcontrollerpublicclassmessagerestcontrollervalue($message:hellodefault)privatestringmessage;requestmapping(/message)stringgetmessage()returnthis.message;當(dāng)perties文 件 里的message 變 量 發(fā) 生變 化 后 ,請 求/message 時返回的 message值將是更

8、新后的message內(nèi)容。pom.xml 關(guān)鍵依賴項(xiàng):spring-cloud-config-clientspring-boot-starter-actuator同時需要引入springcloud的依賴項(xiàng)spring-cloud-dependenciescamden.sr5pomimport在 src/main/resouce目錄建立 perties文件,設(shè)置配置服務(wù)url與perties文件內(nèi)容:#配置服務(wù)地址#servicenamespring-boot-demo注 : 不 能 在pert

9、ies設(shè) 置 配 置 服 務(wù) 的url,因 為perties的啟動優(yōu)先級最低, 不能在程序啟動之前讀取到配置服務(wù)url,從而不能加載配置服務(wù)上相應(yīng)的配置。4服務(wù)注冊register-service提 供 服 務(wù) 的 注 冊 與 發(fā) 現(xiàn) 。 所 有 的 服 務(wù) 都 需 要 注 冊 到register-service中,否則不能夠被其他服務(wù)發(fā)現(xiàn)與調(diào)用,比如路由服務(wù)。關(guān)鍵配置pom.xml 關(guān)鍵依賴項(xiàng):spring-cloud-starter-eureka-server同時需要引入springcloud的依賴項(xiàng)spring-cloud-dependenciescamde

10、n.sr5pomimport主程序加上注解:enableeurekaserver 如下:enableeurekaserverspringbootapplicationpublicclassregisterserviceapplicationpublicstaticvoidmain(stringargs)springapplication.run(registerserviceapplication.class,args);對應(yīng)配置服務(wù)器上的perties中添加注冊服務(wù)的地址。perties配置如下:#服務(wù)啟動端口s

11、erver.port=8082#注冊服務(wù)地址5統(tǒng)一網(wǎng)關(guān)路由所有 rest 請求均需要通過網(wǎng)關(guān)來路由到具體的服務(wù)。網(wǎng)關(guān)服務(wù)能起到負(fù)載均衡、動態(tài)路由、統(tǒng)一認(rèn)證等功能。使用代理服務(wù)能夠避免必須的跨域資源共享(cross-originresourcesharing) 。當(dāng)一個 ui 應(yīng)用調(diào)用一個或更多的后端服務(wù)的時候,通過網(wǎng)關(guān)服務(wù)來做統(tǒng)一的代理。前端應(yīng)用不再需要關(guān)心后臺業(yè)務(wù)服務(wù)的具體地址,因此當(dāng)業(yè)務(wù)服務(wù)的地址變更后也不需要修改應(yīng)用端的配置。所有的請求都在網(wǎng)關(guān)做了統(tǒng)一的認(rèn)證授權(quán),因此業(yè)務(wù)服務(wù)也不再需要考慮與授權(quán)有關(guān)的問題。按照約定 , 一個 serviceid為userservice的服務(wù)會收到 /us

12、erservice請求路徑的代理請求 ( 前綴會被剝離 ) 。因此要查詢用戶id 是 590d38b064328b1aac828ae6的信息,完整的請求路徑是其中 userservice是 userservice的 sericeid,users/id是該服務(wù)提供的對外訪問接口。網(wǎng)關(guān)服務(wù)會自動根據(jù)請求路徑里的serviceid(本例中是 userservice)找到 userservice的請求地址, 并路由給該服務(wù)的users/id接口,其最終的路由地址是注: url不包括 /userservice。而網(wǎng)關(guān)服務(wù)能夠正確路由的前提是userservice已經(jīng)在注冊服務(wù)上注冊。6認(rèn)證授權(quán)對于某用戶

13、的授權(quán)分為兩類,一類是該用戶是否能夠訪問某些url,一類是它在界面上所能看到哪些功能(即菜單)。應(yīng)用端訪問后臺服務(wù)時均需要經(jīng)過授權(quán)服務(wù)auth-service認(rèn)證才能訪問服務(wù)的資源。授權(quán)服務(wù)對資源的訪問控制通過uri+serviceid+httpmethod 來控制,如角色 role_user 的資源權(quán)限為服務(wù)名為userservice的 user/*,請求方式為all,則其對所有 userservice服務(wù)的 uri 為 user/ 形式的資源均有權(quán)訪問。如post所以在設(shè)計api 接口時,需嚴(yán)格按照第一節(jié)中restapi的規(guī)范定義接口,以方便對某一類資源的請求做統(tǒng)一的權(quán)限配置。同時在應(yīng)用端

14、,某用戶登錄進(jìn)來后能夠訪問的菜單也是通過授權(quán)服務(wù)控制。菜單資源包括菜單的名稱,圖標(biāo),跳轉(zhuǎn)路徑等屬性。 應(yīng)用端通過授權(quán)得到的菜單屬性,并決定菜單界面的布局。菜單對象定義如下:publicclassmenuprivateintegerid;privatestringmenuname;privateintegerparentid;privatestringmenucode;privatestringmenuurl;privatestringmenuicon;privatestringurltarget;privateintegerisactive;privateintegernavmenu;priv

15、ateintegerisleaf;privateintegerviewtype;privateintegersort;privatestringremark;privatestringcreator;privatestringmodified;privatedatecreatetime;privatedatelastupdate;7持續(xù)集成項(xiàng)目開發(fā)完成后,通過jenkins持續(xù)集成,打包成docker 鏡像后上傳到服務(wù)器上的 dockerrepository后運(yùn)行,所以需要在pom.xml 文件里配置mavendocker 插件。pom.xml 關(guān)鍵配置:src/main/resources*

16、/*falsesrc/main/java*/*.properties*/*.xmlfalsespring-boot-maven-plugintruecom.spotifydocker-maven-pluginsrc/main/dockertrue/在 src/main/下建立 docker 目錄,并新建dockerfile,內(nèi)容如下:fromjava:8volume/tmpaddapp.jarexpose8080cmdjava-jarapp.jar當(dāng)程序經(jīng)過測試并提交到gitlab后, jenkins將自動構(gòu)建并打包成docker 鏡像發(fā)布到遠(yuǎn)程 docker 倉庫。同時 jenkins會通知

17、遠(yuǎn)程服務(wù)下載該鏡像并重新運(yùn)行。8集成 mybatis所有數(shù)據(jù)庫操作采用mybatis 來管理。集成mybatis 關(guān)鍵配置如下:添加 pom.xm依賴mybatis-spring-boot-starter1.3.0 mybatis-spring-boot-starter-test1.3.0 mysqlmysql-connector-javasperties(托管于gitlab上, 由配置服務(wù)統(tǒng)一管理) 主要配置如下:mybatis.config-location=classpath:mybatis-config.xml 資源的配置結(jié)構(gòu)如下圖:其中 myba

18、tis-config.xml內(nèi)容:cittymapper.xml內(nèi)容如下:select*fromcitywhereid=#iddeletefromcitywhereid=#idinsertintocity(id,name,state,country)values(#id,jdbctype=integer,#name,jdbctype=varchar,#state,jdbctype=varchar,#country,jdbctype=varchar)該配置文件定義了三種數(shù)據(jù)庫操作,對應(yīng)了citymapper 這個接口中的三種方法mapperpublicinterfacecitymappercityselectcitybyid(int city_id);void insertcity(citycity );void deletecitybyid(int city_id);附錄一:

溫馨提示

  • 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

提交評論