從 Spring Pet Clinic 學 Spring系列(1)

Rex Wang
Oct 2, 2023

--

Spring Pet Clinic 是由Spring團隊成員撰寫的範例程式,其中展示Spring的使用方式;它從2007年就開始發展,期間中斷了數次,直到2016年由Spring Boot/Spring Cloud 的重要貢獻者 Dr. Syer重新開始撰寫至今。

我打算以Spring Pet Clinic Microservice做為基礎,並從測試的角度來一系列解析這個範例程式,除了從中學習Spring Boot、Spring Cloud,並理解Microservices相關架構設計與開發。雖然其中不見得包含領域驅動設計、六角形或Clean Architecture,但絕對是學習Spring 的好教材。

這系列的第一篇,首先我們來看看它的部署與使用方式。可以從這個網址(https://github.com/spring-petclinic/spring-petclinic-microservices)下載程式碼,由於現在的Spring Pet Clinic 已經用Spring Boot 3改寫,請在執行前確定電腦是否已經安裝 JDK17。

微服務的架構測試非常重要,但卻比以為過去的單體應用更加困難;然而,應用的功能正確與否,跟是否在容器裡執行無關;所以我個人建議,微服務開發應該落實測試,而近一步的整合測試也應該在鏡像打包前就應該先行執行,避免使用額外的打包鏡像時間後,才發現功能不如預期,需要重新除錯後與打包鏡像,耗費時間且中斷除錯的思緒。

下載後,在路徑裡面可以看到幾個依微服務劃分的路徑:

這個專案已經有Maven了,所以不需要額外安裝,要啟動服務時,請先到每個服務的路徑下,執行

cd spring-petclinic-config-server
../mvnw spring-boot:run

這裡需要注意每個服務需要一個 termial,以便觀察啟動狀態,另外啟動服務的順序須為, spring-petclinic-config-server 第一個啟動,接著再開另外一個termail啟動 spring-petclinic-discovery-server,其他的服務順序就沒那麼重要了。下列為 spring-petclinic-config-server的例子,我們可以觀察到它會佔用 8888 port 。

你可以透過瀏覽器 http://localhost:9090 查看管理畫面的應用清單

也可以透過瀏覽器查看 API Gateway http://localhost:8080

如果你發現每個服務有連不上 localhost:9411,那是因為在本地直接執行的方式,沒有提供Zipkin的服務進行鏈路追蹤,暫時可以忽略它,或是執行下面指令,部署 Docker版的 Prometheus、Grafana與OpenZipkin

./scripts/run_all.sh

後續,我將會一步一步帶著大家,從頭開始理解Spring Framework、Spring Boot、Spring Cloud 與微服務開發。

--

--

Rex Wang

最近看了一些網路技術大神建議,藉由寫部落格來記錄自己的學習歷程,並且可以累積自己的技術能力。於是,繼多年前雜誌技術編輯生涯,我再度展開了屬於自己的技術寫作之旅。