1. 程式人生 > >Spring Cloud+docker實現微服務負載均衡

Spring Cloud+docker實現微服務負載均衡

網上關於微服務實現負載均衡有不同的實現方式,有用ribbon,也有用zuul的,本文用zuul來實現

一般也稱Spring Cloud Zuul為微服務中的閘道器服務

微服務主要包含註冊與發現服務,路由服務(閘道器服務),配置服務,熔斷服務,降級服務等一系列的服務.

我們用註冊與發現服務,路由服務,應用App來搭建一個比較簡單的實現負載均衡的微服務

下面開始實現微服務負載均衡

1,搭建註冊與發現服務

直接到https://start.spring.io上建立SpringBoot專案,如下圖

然後把專案匯入eclipse之後,在pom.xml檔案中新增相關的jar包,如下


然後在Application啟動類中添加註解,如下

然後在配置檔案application.yml(application.properties)中新增,如下

注意,如果是application.yml檔案,則要留意裡面的縮排都是以2個空格鍵來的,不是以tab鍵

到此,註冊與發現服務就搭建好了,執行專案,瀏覽器輸入localhost:9999,如下

我們的註冊與發現服務已經執行起來了,上圖中紅框內的內容表示發現並註冊的服務,目前還沒有服務註冊進去,所以是空的

2,搭建一個叫microsoftA的應用App

一樣到https://start.spring.io建立SpringBoot專案,匯入到eclipse後修改pom.xml,如下

然後就是application啟動類,如下

注意:這裡不是@SpringBootApplication,而是@SpringCloudApplication

@SpringCloudApplication註解整合了以下多個註解:

@SpringBootApplication、@EnableDiscoveryClient、@EnableCircuitBreaker等

接著配置檔案application.properties,如下

新建一個controller,寫一個介面,如下

然後把這個應用App執行起來,這個時候再看下我們之前的註冊與發現服務頁面,如下

如上所示,我們的microsoftA應用已經註冊了,我們訪問剛才寫的介面,如下


3,搭建一個叫microsoftB的應用App

按照步驟2再新建一個專案,在配置檔案裡新增如下內容

也新建一個controller,如下

然後執行起來,再看下注冊與發現頁面,如下

修改下microsoftA的介面,如下

訪問介面,如下

4,搭建閘道器服務

同樣在https://start.spring.io新建專案,匯入eclipse,修改pom.xml如下

修改application啟動類,如下

修改配置檔案,如下

如上所示,path和serviceId實現了反向代理,那是負載均衡是如何實現的呢

我們按照之前的步驟在新建一個microsoftC應用,修改配置檔案,如下

如上所示,除了埠外,其他的配置都跟microsoftB一模一樣的,然後執行,再看看註冊與服務頁面,如下


上圖所示,新增了閘道器服務,還有一個埠為6000的microsoftB服務

註冊與發現服務會把註冊名稱相同的服務歸到一起,Spring Cloud Zuul閘道器服務,在做反向代理的時候如果發現該服務名稱下面

有多個埠的服務,則會挑選其中一個來訪問

在剛才訪問microsoftA服務介面的頁面修改下介面地址,如下

如上所示,我們訪問的閘道器的埠,返回的依然是microsoftB服務介面返回的資訊

我們再回到microsoftA服務的controller改下訪問microsoftB服務的介面地址,如下

這裡也要換成閘道器的埠,多次訪問microsoftA服務的介面,如下所示

這個時候微服務已經通過負載均衡來返回資料了

5,build成docker映象

把上面幾個專案的配置檔案都加上以下內容

eureka.instance.prefer-ip-address=true  
eureka.instance.instance-id=伺服器的IP:埠

不加這兩句的話微服務之間會無法訪問,因為docker做了環境隔離

然後把jar包打成docker映象,具體讓發可以參考

http://blog.csdn.net/wsbgmofo/article/details/79088186

打成映象後把每個映象run成容器執行起來,然後按照上面的步驟把localhost換成伺服器地址埠即可

這裡有個問題,如果要用build成功的映象run多個容器出來,需要設定對應的埠引數

Dockerfile如下

run容器的時候,輸入以下命令

docker run -d -e PARAMS="-Dserver.port=3000 -Deureka.instance.instance-id=xxx:xxx:xxx:xxx:3000" -p 3000:3000 microsoft-d

這樣就可以run多個不同埠的容器註冊到微服務中