- 微服務容器化開發實戰
- 尹為強
- 1329字
- 2020-10-30 15:17:08
2.4 編寫框架代碼
如果使用Spring Cloud“全家桶”構建項目的微服務框架,則可以使用EUREKA、Zuul、Config、Hystrix、Zipkin和Ribbon等組件。EUREKA用于服務注冊與發現,Zuul用于網關與路由,Config用于統一配置,Hystrix用于熔斷器,Zipkin用于調用鏈跟蹤,Ribbon用于客戶端調用的負載均衡。Spring Cloud各組件的詳細介紹與使用讀者可自行學習,此處不再贅述。
筆者的生產項目沒有使用Spring Cloud微服務框架全套組件,而是結合微服務運行環境Kubernetes進行了取舍,選取了Zuul、Hystrix和Zipkin,而服務注冊與發現則使用Kubernetes的服務發現與注冊來代替,使用Spring Boot Security和JWT進行角色與權限控制。
2.4.1 創建Maven工程
創建一個Maven工程,目錄名稱為ecs-order-system,項目名稱為eos-parent。該項目是父項目,后續各個微服務為其子項目(子模塊)。下面對eos-parent項目的pom.xml文件進行解析。
(1)父項目定義,具體如下:

定義eos-parent父項目的groupId、artifactId和版本號version。
(2)JDK版本定義,具體如下:

定義eos-parent父項目及其子模塊都是基于JDK1.8進行編輯和編譯的。
(3)Spring Boot版本定義,具體如下:

定義將Spring Boot 1.5.13版本作為開發環境和運行環境。
(4)Spring Cloud版本定義,具體如下:

定義將Spring Cloud Edgware.SR4版本作為開發和運行環境。
(5)Maven編譯插件定義,具體如下:

定義使用Spring Boot的Maven插件進行微服務編譯和打包。
(6)微服務公共依賴定義,具體如下:

微服務子模塊的公共依賴定義包括RESTful API開發、熔斷和調用鏈等需要依賴的包,版本號繼承使用Spring Boot和Spring Cloud定義的版本即可,這些公共依賴定義在dependencies內部。
2.4.2 創建微服務模塊
父項目設置完成后,需要創建各個微服務的子模塊,單擊父項目,選擇“File/New”菜單中的“Module”命令,彈出的對話框如圖2-6所示。

圖2-6 創建微服務模塊(一)
單擊“Next”按鈕,設置模塊的GroupId、ArtifactId和Version,如圖2-7所示。

圖2-7 創建微服務模塊(二)
如圖2-7所示,子模塊的GroupId和Version可以繼承父項目。ArtifactId是微服務名稱,一般采用“xxxx-xxxx-xxxx”的三段式命名規則,可以命名為“公司-產品-模塊”。筆者參與的項目沒有命名公司,而是從部門產品系統開始的,如eos-order-verify和eos-system-setting分別表示訂單審核與系統設置微服務。
添加微服務子模塊后,在父項目的pom.xml文件中會添加一個模塊module,具體如下:

2.4.3 微服務代碼結構
框架代碼包括父項目和各子模塊的代碼結構與基本配置,在IDEA中,微服務eos-order-account的代碼目錄結構如圖2-8所示。

圖2-8 微服務eos-order-account的代碼目錄結構
配置文件包括Maven的pom.xml文件和Spring Boot的bootstrap.yml、application-dev.yml、application-prod.yml、application-test.yml。Java代碼包括Spring Boot啟動入口的OrderAccountApplication.java,以及Spring Boot開發的基本源代碼目錄controller、mapper、service等。
下面對各文件和目錄進行詳細介紹。
1.pom.xml文件
該段代碼配置的關鍵是parent配置項,完整配置如下所示:

微服務的Maven配置pom.xml文件,使用parent設置繼承父項目配置,同時設置自己的artifactId。
2.Spring Boot配置文件
微服務使用Spring Boot進行開發,配置文件包括application-dev.yml、application-prod.yml、application-test.yml、bootstrap.yml。其中,application-*.yml是運行在開發、測試和生產環境中的特殊配置,bootstrap.yml是微服務啟動后首先加載的配置文件。
bootstrap.yml配置一般是固定不變的,如微服務名稱、端口等;而application-*.yml配置是隨運行變化而變化的,如數據庫地址、redis地址、第三方接口地址、日志輸出目錄等。
application-dev.yml配置如下(節選):

application-prod.yml配置如下(節選):

bootstrap.yml配置如下:

此處沒有展示application-test.yml配置的內容,從application-dev.yml配置和application-prod.yml配置來看,主要是日志目錄、數據庫地址、redis地址等隨運行環境不同而需要分開配置。
3.微服務入口文件
微服務入口的代碼格式主要包括幾個注解和main()函數,如下所示:

包含main()函數的OrderAccountApplication.java文件就是微服務eos-order-account的入口,引入Spring Boot啟動注解@SpringBootApplication,需要注意的是,注解@EnableCircuitBreaker是熔斷器使用的,后續章節會詳細介紹。
- 龍芯應用開發標準教程
- 深入淺出SSD:固態存儲核心技術、原理與實戰
- 硬件產品經理成長手記(全彩)
- Manage Partitions with GParted How-to
- AMD FPGA設計優化寶典:面向Vivado/SystemVerilog
- 分布式微服務架構:原理與實戰
- Rapid BeagleBoard Prototyping with MATLAB and Simulink
- Building 3D Models with modo 701
- Neural Network Programming with Java(Second Edition)
- RISC-V處理器與片上系統設計:基于FPGA與云平臺的實驗教程
- 嵌入式系統原理及應用:基于ARM Cortex-M4體系結構
- USB應用分析精粹:從設備硬件、固件到主機端程序設計
- 微服務架構基礎(Spring Boot+Spring Cloud+Docker)
- Zabbix 4 Network Monitoring
- 現代多媒體技術及應用