## Ribbon
Spring Cloud Ribbon是一个负载均衡的解决方案,是netflix发布的负载均衡器,
基于netflix Ribbon实现的,是一个用于对HTTP请求进行控制的负载均衡客户端。
在注册中心对Ribbon进行注册之后,Ribbon就可以基于某种负载均衡算法,如
轮询、随机、加权轮询、加权随机等自动帮助服务消费者调用接口,开发者也
可以自定义Ribbon负载均衡算法。
Spring Cloud Ribbon需要结合Spring Cloud Eureka来使用,Eureka server
提供所有可以调用的服务提供者列表,Ribbon基于特定的负载均衡算法从这些服务
提供者中选择要调用的具体实例。
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200711114536192.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTY5NjQz,size_16,color_FFFFFF,t_70)
**它没有服务,只是提供一个负载均衡的功能**
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200711114603596.png)
创建模块,pom.xml依赖
```yaml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
</dependencies>
```
创建配置文件 application.yml
```yaml
server:
port: 8084
spring:
application:
name: ribbon
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
```
创建启动类
```java
package com.shuang;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class RibbonApplication {
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class,args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
```
@LoadBalanced:声明一个基于Ribbon的负载均衡。
Handler
```java
package com.shuang.controller;
import com.shuang.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.Collection;
@RestController
@RequestMapping("/ribbon")
public class RibbonHandler {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/findAll")
public Collection<Student> findAll(){
return restTemplate.getForObject("http://provider/student/findAll",Collection.class);
}
@GetMapping("/index")
public String index(){
return restTemplate.getForObject("http://provider/student/index",String.class);
}
}
```
**依次启动:注册中心、服务提供者一、服务提供者二、ribbon负载均衡。**
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200711114805373.png)
8080与8082两个服务提供者交替执行。
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200711114825532.png)
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/2020071111484129.png)