在微服務架構模式中後端服務的實例數通常是動態的,於客戶端而言很難發現動態改變的服務實例的訪問地址信息,服務網關能對用戶提供統一的入口。 html
ServiceComb Java-Chassis 內置了網關服務EdgeService,開發者能夠很是簡單的搭建一個EdgeService服務。前端
具體可參考:https://docs.servicecomb.io/java-chassis/zh_CN/edge/by-servicecomb-sdk.html java
本文將介紹ServiceComb與SpringCloud的Zuul網關組件協同工做,以構建微服務應用。ServiceComb在自身的處理鏈HandlerTrain中已完成Zuul的對接,用戶用極簡單的方法配置後便可使微服務應用具有網關服務的能力。git
爲使讀者更好地理解,本文將編寫一個簡單的Hello微服務,並啓動2個實例來進行演示。程序員
Hello微服務提供hello/{name}接口,只需從前端輸入參數name就可從後端微服務獲取到程序員百看不厭的Hello world結果。spring
微服務模式下的Hello應用模型apache
技術準備後端
|
ServiceComb 做爲後端微服務核心框架
ServiceCenter 做爲服務發現與註冊中心
SpringCloud Zuul 組件作服務網關瀏覽器
環境準備springboot
|
如下環境爲Windows 64位系統
●安裝git,詳情可參考git安裝教程
https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
●安裝JDK 1.8,詳情可參考JDK安裝教程。
https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html
●安裝Maven 3.x,詳情可參考Maven安裝教程
https://maven.apache.org/install.html
ServiceCenter安裝
下載地址:
http://mirrors.hust.edu.cn/apache/servicecomb/servicecomb-service-center/1.1.0/
下載後解壓以下▼
在該目錄下雙擊service-center.exe便可啓動,命令窗口中出現以下信息基本表明ServiceCenter啓動成功,從這個信息也能夠得知ServiceCenter監聽的是30100端口,等下配置文件要用到。
問題點:有可能會有以下信息,這個通常是端口被佔用,極可能你打開了兩個ServiceCenter,都關閉後再打開就能夠了。
↓↓↓
示例
1、後端微服務 HelloService
01添加依賴
新建maven項目HelloService,pom文件以下
02配置
新建ServiceComb配置文件src/main/resources/microservice.yaml,內容以下
▼
03項目入口
新建啓動類HelloApplication.java,內容以下
▼
新建Controller類HelloController.java (這裏我習慣SpringMvc的叫法,重點看註解)
04啓動
到此,Hello微服務就寫完了。這裏要啓動2個實例。
1.先打包,執行mvn clean package
2.在項目根目錄下target目錄下將lib目錄和生成的jar包複製到另外一個目錄中
3.複製jar包,修改其中一個jar包微服務啓動端口號爲8888(經過WinRar解壓縮軟件打開jar包並打開microservice.yaml文件修改裏面的rest端口號)
4.在當前目錄打開兩個cmd命令窗口,分別執行命令java -jar HelloService-7777.jar和java -jar HelloService-8888.jar 。此時已經啓動了2個微服務實例。
2、編寫Zuul網關服務
01添加依賴
新建maven項目 zuulserver,pom文件以下
02配置文件
新建springboot配置文件src/main/resources/application.yaml,內容以下
新建ServiceComb配置文件src/main/resources/microservice.yaml,內容以下
03項目入口
新建啓動類 ZuulApplication.java
新建靜態文件 src/main/resources/static/index.html,內容以下 (static目錄是按springboot項目規範,屬於應用靜態文件根目錄)
04啓動
到此,網關服務器寫完,以下在IDEA裏面直接啓動應用
三. 演示效果
瀏覽器訪問http://localhost:8080/ ,以下圖。 在輸入框中輸入姓名,就能夠在下面看到打招呼的信息
連續點擊幾回打招呼按鈕,能夠在啓動的2個Hello微服務實例的控制檯中看到被調用的信息,以下圖(因爲這裏使用的ServiceComb默認的負載均衡策略 輪詢,可見到兩個實例都均被調用,關於負載均衡,咱們將在後續的文章中解讀)。
此時用戶並不須要關心具體哪一個實例被調用了,訪問的是哪一個後端的實例地址,它只要訪問網關就能夠了:)
總結
從以上的示例能夠看出,經過 ServiceComb 結合SpringCloud Zuul 實現服務網關功能只需一些簡單的配置。後續能夠在網關服務上實現統一的鑑權,日誌記錄,和自定義過濾器等。
參考
[1] SpringCloud Zuul
https://cloud.spring.io/spring-cloud-netflix/multi/multi__router_and_filter_zuul.html
[2] ServiceComb
http://servicecomb.apache.org/cn/docs/quick-start/