Ribbon
Ribbon是客户端负载均衡的组件,说真的一说到负载均衡我就想到了redis,反正这两个还有点关系呢
1.当服务提供方搭建集群后,通过Ribbon提供的负载均衡策略来决定到底访问那一台服务提供方
2.Ribbon是一个客户端负载均衡(客户端和服务端负载均衡的区别)----我觉得蛮重要的
接下来进入入门操作:
第一步当然是,导入依赖了
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
第二步,在我们SpringBoot自带的RestTemplate(不知道这是什么,或者不知道怎么用的我会在文章最后讲解哦,先不耽误思路)上加注解@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
第三步,也就是我们以往正常访问服务了
restTemplate.getForObject("http://服务名/路径", String.class);
当然加注解的负载均衡就是最最默认的轮询了,但如果小伙伴决定轮询有一丝丝无聊的话,当然还有别的方法,那么方法在哪里呢,就是文档了哈哈哈
#这个就是在我们的core的启动类中写的哦,就是看同时发请求,谁的请求会先被服务提供者接收到并指向
@Bean
public IRule randomRule(){
return new RandomRule(); // 从默认轮询改为随机
}
使用前切记在当前server下的配置文件中修改
服务名:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
当然,不仅仅这两种负载均衡策略了,我们还可以自定义哦,那么怎么进行自定义呢?
首先我们先进入我们的 IRule 点进去之后我们会发现,这是一个接口,看他的方法
public interface IRule{
# 前两句的意思就是根据密钥从lb.allServers或lb.upServers中选择一个活动服务器
/*
* choose one alive server from lb.allServers or
* lb.upServers according to key
*
# 返回choosen服务器对象。如果没有,则返回NULL服务器可用
* @return choosen Server object. NULL is returned if none
* server is available
*/
#选择负载均衡器
public Server choose(Object key);
#设置负载均衡器
public void setLoadBalancer(ILoadBalancer lb);
#ILOAD平衡器
public ILoadBalancer getLoadBalancer();
}
进入choose方法后
有个方法叫做
@Monitor(name="AvailableServersCount", type = DataSourceType.GAUGE)
public int getAvailableServersCount() {
#先获得一个负载均衡器
ILoadBalancer lb = getLoadBalancer();
#用辅助均衡器获得所有server
List<Server> servers = lb.getAllServers();
if (servers == null) {
return 0;
}
return Collections2.filter(servers, predicate.getServerOnlyPredicate()).size();
}
我目前的自定义负载均衡还没有很熟练,我会在这两天将负载均衡整理好后在发一次,望见谅,
最后,我把上面RestTemplate简单说一下:
首先,这是SpringBoot自带的一个http的请求工具,它包含了,get,post,putdelete以及一些通用的请求指向方法,通常就是项目做到解耦和,服务调用者要通过地址信息发送到服务提供者时才会使用,根据不同的请求可以 xxxfotpbject(路径+请求参数);当然了也可以深挖,不过我觉得目前阶段会应用就可以了。