Ribbon是Netflix發佈的開源項目,主要功能是提供客戶端的軟件負載均衡算法。java
將Netflix的中間層服務鏈接在一塊兒。Ribbon客戶端組件提供一系列完善的配置項如鏈接超時,重試等。簡單的說,就是在配置文件中列出Load Balancer(簡稱LB)後面全部的機器,Ribbon會自動的幫助你基於某種規則(如簡單輪詢,隨即鏈接等)去鏈接這些機器。咱們也很容易使用Ribbon實現自定義的負載均衡算法。web
先啓動上篇文章中的註冊中心eureka-server:8001, 以及hello-service:8011,接着修改hello-service項目配置文件中的端口,改爲8012,再次運行用戶服務項目。算法
執行成功,查看Eureka註冊中心,能夠看到有用戶服務應用有兩個端口對應。spring
(若是是IDEA用戶,須要修改Application.java的執行方式,默認是單實例運行,因此你在運行8011的項目,修改端口沒法再次運行。)緩存
pom.xml:app
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
application.properties:負載均衡
spring.application.name=hello-consumer-ribbon server.port=8021 eureka.client.serviceUrl.defaultZone=http://localhost:8001/eureka/spring.application.name=hello-consumer-ribbon server.port=8021 eureka.client.serviceUrl.defaultZone=http://localhost:8001/eureka/
啓動類:異步
package cn.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.annotation.Bean; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableDiscoveryClient @RestController public class HelloConsumerRibbonApplication { public static void main(String[] args) { SpringApplication.run(HelloConsumerRibbonApplication.class, args); } @Bean @LoadBalanced public RestTemplate restTemplate () { return new RestTemplate(); } @Autowired private RestTemplate restTemplate; //獲取服務實例,做用爲以後console顯示效果;"http://USER-SERVICE/hello?name= 標識註冊的服務。USER-SERVICE在eureka註冊的服務名 @RequestMapping("hello") public ResponseEntity<String> hello (String name) { return restTemplate.getForEntity("http://USER-SERVICE/hello?name=" + name, String.class); } }
4、測試
測試服務消費
http://localhost:8021/hello?name=ribbonmaven
測試負載均衡:
咱們在hello-service hello方法中加上日誌打印,而後再分別啓動 hello-service:8012,8002,而後屢次訪問 http://localhost:8021/hello?name=ribbon,能夠看到兩個hello-service項目的控制檯都有日誌輸出,表示實現了負載均衡。spring-boot
使用RestTemplate+Ribbon必須指定調用服務名稱,如上面的HELLO-SERVICE,爲了方便使用,SpringCloud還集成了Feign消費方式。————————————————