简单介绍下Ribbon
Ribbon是Netflix发布的负载均衡器,默认提供很多负载均衡的算法,在Spring Cloud的体系中主要的作用是对服务的消费(从注册中心中获取服务器的信息,之后经过负载均衡的算法去调用相应的服务器)
Ribbon 的工作方式
该方法通过RESTful进行请求,简单点讲就是使用了一个拦截器,在调用RestTemplate的时候拦截url进行解析完成服务的调用.
为服务消费者整合Ribbon
为服务添加如下配置
@Configuration
public class MyConfig {
@Bean
@LoadBalanced
public RestTemplate loadTemplate() {
return new RestTemplate();
}
@Primary
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@LoadBalanced该注解表示在加载RestTemplate的时候引入LoadBalance的加载
- Ribbon就是通过RESTful对服务进行调用,经过LoadBalanced加工之后
@Autowired
@LoadBalanced
private RestTemplate restTemplate;
@Autowired
DiscoveryClient discoveryClient;
@GetMapping("consumer")
public String dc() {
return restTemplate.getForObject("http://eureka-client/dc", String.class);
}
- Ribbon在实现REST请求的时候加了一层连接器,将内部的服务名解析了出来.
开始测试
- 启动两个Eureka-Client(负载均衡)两个Eureka-Server(高可用注册中心)启动一个Ribbon消费者
- 请求接口检测负载均衡的效果
如果两次请求出现1 和 2 来回切换则表示负载均衡配置成功.
自定义ribbon配置
回来啦,由于业务需求研究了下ribbon的自定义配置
上文主要说的是,通过更改配置文件可以完成自定义的ribbon配置
这里简单的讲了下配置的规则
以此是,项目名称,ribbon,使用的规则,再加上使用的规则的详细的类名称.
查看ribbon的源码可以发现ribbon已经提供了很多默认的规则,这里我们可以测试下:使用randomrule(随机分配)ribbon默认的负载方式是轮询,这里我们将负载方式改成随机.来看一下效果
eureka-client:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
在项目的配置文件下添加上文内容来更改ribbon的负载方式.
启动eureka-server,eureka-client(两台,测试轮询)服务.
测试结果正常出现随机去访问两台机器那就代表更改ribbon的负载方式成功.