Ribbon是Spring Cloud核心组件之一,它提供的最重要的功能就是负载均衡,和硬件负载均衡F5不同,它的负载均衡是基于客户端的,Zuul网关和Feign可以通过Ribbon轻松的实现服务的负载均衡,同时避免了与业务无关的冗余代码。
搭建
- 用集群方式创建两台生产者eureka-client,提供方法供消费者调用,并向eureka-server注册
- 创建一台消费者,提供方法,调用生产者提供的方法,同样向eureka-server注册
- 向生产者多次发送请求,检验是否实现负载均衡
使用
首先创建一台springboot项目–做生产者
- 引入web依赖,用来响应以及发请求
- 引入eureka-client依赖,用做服务注册
- 配置yml文件
- 开启eureka客户端,@EnableEurekaClient
- 手写一个方法以供消费者调用
pom.xml文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
yml文件
server:
port: 8080
spring:
application:
name: provider
eureka:
client:
service-url:
defaultZone: http://eureka的IP地址/eureka
instance:
hostname: localhost
prefer-ip-address: true
instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
controller方法
@RestController
public class ProviderController {
@GetMapping("/hello")
public String hello(){
return "我是提供者aaaaa的接口";
}
}
再创一台生产者做集群
- 端口号不能重复,但应用名称要相同
- 方法返回值做修改,用以检验负载均衡是否成功
创建一个springboot项目–用作消费者
- 引入web依赖,用来响应以及发请求
- 引入eureka-client依赖,用做服务注册
- 引入ribbon依赖,用作负载均衡
- 配置yml文件
- 开启eureka客户端,@EnableEurekaClient
- 向spring容器中,添加restTemplate实例,并加@LoadBalanced
- 手写一个请求,用restTemplate来发送,返回结果
spring容器
/**
* 这个restTemplate已经变了
* @LoadBalanced 他就会被ribbon来操作
* @return
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
controller
@Autowired
private RestTemplate restTemplate;
@GetMapping("/testRibbon")
public String testRibbon(String serviceName){
//正常情况下要拿到ip和prot以及路径才可以用
String result = restTemplate.getForObject("http://" + serviceName + "/hello", String.class);
return result;
}
结果
用浏览器发送请求,访问消费者的testRibbon方法,可以返回生产者型号,在页面上轮询显示a生产者和b生产者