在實戰三中,我們曾說到,我們需要一種機制,可以在訪問服務的時候不需要關心IP,并且還能提供類似Nginx的負載均衡的功能,其實在上一篇文章中我們已經使用過spring-cloud的負載均衡功能了,還記得我們在配置restTemplate的時候加的注解嗎?
@LoadBalanced就是告訴restTemplate,需要使用負載均衡,并且,在eureka-client消費者消費服務的時候,只能通過@LoadBalanced才能使用eureka-server中的服務application-name來訪問服務.eureka中的負載均衡,是借助ribbon來實現的,讓我們來試一試.老規矩,通過前面這么多次的實踐,我們會發現使用spring-cloud的功能一般有三個步驟:
1.配置maven依賴
2.配置application.properties
3.進行代碼編碼.
首先配置maven:
但其實如果使用了eureka,就不需要這個步驟了,因為eureka中已經內置了ribbon了:
默認情況下,@LoadBalanced的負載均衡策略是輪詢,我們使用producer修改代碼,啟動三個微服務注冊到eureka,然后在consumer來驗證一下:
可以看到,我們已經注冊了三個producer微服務,然后使用consumer來訪問一下:
再刷新一下:
再刷新一下:
再刷新一下:
可以看到,默認情況下采用的是輪詢的方式,那么如果我們要自定義負載均衡策略能實現嗎?答案當然是可以,自定義負載策略分為兩種:
1.全局負載均衡策略
2.針對某個微服務定制個性化的負載均衡策略
全局負載均衡
要實現全局的負載均衡策略很簡單,我們只需要如下代碼即可:
然后重啟consumer刷新試一試,可以發現,采用的是隨機的負載均衡策略.
個性化的負載均衡策略
個性化的負載均衡策略相對于全局負載均衡策略更復雜一些,首先,需要在spring掃描不到的位置,比如和主類不在同一個目錄下:
然后修改啟動類:
如果有多個需要自定義的服務,可以使用@RibbonClients用數組來處理.
那么,如果脫離eureka來使用ribbon還能使用嗎?答案當然是可以的,只不過相對而言更復雜,我們需要自己編寫代碼來實現,比如:
介紹完了ribbon,下一篇文章,我們會介紹feign接口服務,敬請期待.
本文由博客一文多發平臺 OpenWrite 發布!