1,Ribbon ['rɪbən]
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
2,架构说明
Ribbon在工作时分成两步
第一步先选择 EurekaServer ,它优先选择在同一个区域内负载较少的server.
第二步再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址。
其中Ribbon提供了多种策略:比如轮询、随机和根据响应时间加权。
2,具体实现
因是客户端的负载均衡工具,所以针对的是服务消费者如:microservice-consumer-dept-80
2.1 pom.xml
<!-- Ribbon相关 -->
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2.2 新建配置类 ConfigBean,使用@LoadBalanced
@Configuration
public class ConfigBean
{
@Bean
@LoadBalanced
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
}
2.3 参考microservice-provider-dept-8001,新建两份,分别命名为8002,8003
2.4 新建8002/8003数据库,各自微服务分别连各自的数据库
2.5 修改对应 application.yml文件
2.6 测试
启动Eureka Server(microservice-eureka-7001)
启动服务提供者(microservice-provider-dept-8001、microservice-provider-dept-8002、microservice-provider-dept-8003)【同一微服务,不同实例】
启动服务消费者(mircoservice-consumer-dept-80)
测试url:http://localhost/consumer/dept/list
刷新查看数据来源即可
3,Ribbon 自定义
3.1 主启动类添加 @RibbonClient
如:@RibbonClient(name=“MICROSERVICE-DEPT”,configuration=MySelfRule.class)
3.2 新建类 MySelfRule
package com.testdemo.myrule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RoundRobinRule;
@Configuration
public class MySelfRule
{
@Bean
public IRule myRule()
{
// return new RandomRule(); // Ribbon默认是轮询,我自定义为随机
// return new RoundRobinRule(); // 轮询
return new testRule(); // 自定义规则
}
}
3.3 新建类 testRule,extends AbstractLoadBalancerRule
重写自定义规则即可
4,参考资料
http://www.chilangedu.com/sectionq/1910610451/E45F6ED4FAB77F58