一、简单介绍
Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具。负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,分摊服务器压力。我们知道,Eureka的服务实例可以进行集群集群部署,每个实例都均衡处理服务请求,那么这些请求是如何被分摊到各个服务实例中的呢?Ribbon就是帮我们解决这个问题的关键。
Ribbon默认提供了很多负载均衡算法,如:轮询、随机等,也可以实现自定义的负载均衡算法。
二、上手
1. 项目结构
我在写eureka的demo的时候创建了eureka-client-8762
和eureka-client-8763
两个服务提供者,本次demo需要用到他们。先看看项目结构:
2 . ribbon-8764 项目创建
我们就创建上面的ribbon-8764
pom.xml 配置和eureka-client-8762
和 eureka-client-8763
的依赖一样,只是比其多 一个ribbon的依赖:
<dependencies>
<!--springboot-starter-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
</dependencies>
application.yml
server:
port: 8764
spring:
application:
name: ribbon-8764
client:
service-url:
defaultZone: http://localhost:8761/eureka
EurekaRibbon8764 启动类 :
@SpringBootApplication
@EnableEurekaClient // 客户端注册
public class EurekaRibbon8764 {
public static void main(String[] args) {
SpringApplication.run(EurekaRibbon8764.class,args) ;
}
}
启动类同级目录下 创建 config文件夹,并在此下创建 RestTemplateConfigure类,用来配置ribbon的负载均衡配置。
package com.dzbiao.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfigure {
@Bean
@LoadBalanced // Ribbon 负载均衡配置
RestTemplate restTemplate() {
return new RestTemplate();
}
}
8761、8762、8763、8764 全部启动,我们可以看到,ribbon-8764已经被注册成功。
此时我们将ribbon-8764当做消费者,我们期许 通过访问ribbon提供的路径,http://localhost:8764/user ,通过RestTemplate去远程调用service服务。
至于上面的 http://service/user
中的service 是8762和8763两个服务在注册中心注册的名称,user 是该服务控制层中的方法路径。
我们通过访问 http://localhost:8764/user
可以看到 返回的带有端口的字符串,多次刷新,返回的字符串会在 8762和8763交替出现。
由此我们可以看到,ribbon-8764 通过轮询算法交替调用 8762 和8763 两个服务。通过交替调用,实现负载均衡,减轻服务压力。