上一篇:SpringCloud—(4)Eureka与Zookeeper的区别
Ribbon是基于Netfix Ribbon实现的一套客户端负载平衡器。
负载均衡 |
说到负载均衡,可能会想到我们的Nginx负载均衡,其常见的负载均衡策略:
1.轮询(默认)
2.指定权重
3.ip_hash 根据ip分配
4.最少连接
负载均衡的作用就是将用户的访问请求有规律的分发到各个不同的服务上,避免出现某个服务器的压力过大,而某个服务器压力很小的情况。
之前的负载均衡我们一般会使用Nginx来实现,Nginx与Ribbon之间还是有一定的区别:
上图是使用Nginx实现了一个负载均衡,它是在服务方和消费方之间使用了独立的负载均衡设施完成。而Ribbon实现负载均衡是将负载均衡逻辑集成到了消费方,由消费方从服务注册中心Eureka中获取到哪些地址可以使用,然后再从中选择一个合适的服务器。
项目中集成Ribbon |
因为Ribbon是从消费者(也就是客户端)实现负载均衡逻辑(Ribbon默认的负载均衡策略也是轮询),所以在使用Ribbon、配置Ribbon的时候我们应该是到Eureka的客户端项目上进行操作。
1.引入Ribbon依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
事实上,SpringCloud项目中的eureka组件的依赖包含了ribbon。所以项目中只要引入了eureka依赖则ribbon组件不再需要单独引入依赖了。
2.添加注解@LoadBalanced
因为SpringCloud使用的是基于Http
的Rest
通信方式,所以会使用到RestTemplate
,引入Ribbon
的时候,直接在配置RestTemplate
的类上添加注解@LoadBalanced
就可以了
@Configuration
public class RestConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
添加了@LoadBalanced
注解之后,服务消费者就会按照Ribbon默认的轮询负载均衡策略选择合适的服务进行访问,负载均衡策略也可以自定义:
自定义负载均衡策略 |
负载均衡策略有一个核心接口IRule
,通过该接口可以实现自定义负载均衡策略
注意:如果需要自定义一个负载均衡策略MyRule
,则该类不能在启动类Application
所在统计目录下,否则会被@ComponentScan扫描到
在Applicaiton
外层创建自定义的负载均衡策略MyRule
之后,需要在启动类添加注解@RibbonClient(name = "", configuration = MyRule.class)
name指定针对哪个服务 进行负载均衡,而configuration指定负载均衡的算法具体实现类。
自定义负载均衡策略可以仿照已有的策略进行修改,都需要继承AbstractLoadBalancerRule
,然后在MyRule
中就可以编写自己的负载均衡逻辑了。