Ribbon簡介
Ribbon是Netflix釋出的負載均衡器,它有助于控制HTTP和TCP的用戶端的行為,為Ribbon配置服務提供者位址後,Ribbon就可基于某種負載均衡算法,自動地幫助服務消費者去請求。Ribbon預設為我們提供了很多負載均衡算法,例如輪詢、随機等,當然,我們也可為Ribbon實作自定義的負載均衡算法
在SpringCloud中,當Ribbon與Eureka配合使用時,Ribbon可自動從EurekaServer擷取服務提供者位址清單,并基于負載均衡算法,請求其中一個服務提供者執行個體。下圖展示了Ribbon與Eureka配合使用時的架構:
Ribbon的初步應用
Ribbon是用戶端負載均衡,是以是內建在消費端,也就是consumer端,本例在前面的基礎上修改microservice-student-consumer-80子產品
首先,引入依賴,在pom.xml加入ribbon相關依賴:
<!--ribbon相關依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
然後在application.yml加入(為了使ribbon結合eureka來調用服務提供者):
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka2001.test.com:2001/eureka/,http://eureka2002.test.com:2002/eureka/,http://eureka2003.test.com:2003/eureka/
然後在SpringCloudConfig.java裡加個負載均衡配置@LoadBalanced:
因為是和Eureka整合,而服務端跟消費端相對于注冊中心來說都是client,是以要在啟動類StudentConsumerApplication_80.java加個@EnableEurekaClient注解:
然後修改下StudentConsumerController.java裡的PRE_HOST變量,改成指定的微服務應用名稱;當然要先在服務提供者microservice-student-provider-1001的application.yml加下配置,指定下應用名稱:
微服務的應用名稱是microservice-student,是以把服務調用者這邊的控制器裡的PRE_HOST變量改成http://MICROSERVICE-STUDENT即可(MICROSERVICE-STUDENT為Eureka注冊中心的應用名稱,需大寫):
上面的都配置好後,就可以開始測試了;先啟動兩個Eureka,然後再啟動服務提供者,再啟動服務消費者:
在浏覽器的位址欄輸入http://localhost/student/list,出現如下結果,說明配置OK: