写在前面
SpringCloud,微服务全家桶,很火,来学一下,本文只是简单使用,并没有仔细研究其原理,还请各位多指教
Ribbon是一个客户端负载均衡,啥意思,就是由客户端来做负载均衡,你自己看着办,那个好,就访问那个
1. 搭建环境
前面我们已经搭建了springboot项目,而且集成了eureka的集群,现在我们集成一下Ribbon负载均衡,既然是客户端负载均衡,那么我们就要在客户端做准备
客户端
1.修改pom文件
image.png2.修改yml文件
image.png3.修改访问前缀
image.png4.修改配置
我们通过RestTemplate访问数据,在这上面添加负载均衡
image.png
这样即可,进行客户端的负载均衡
Ribbon默认的负载均衡算法是轮询,Ribbon自带了好多的负载均衡算法,如果想要切换,需要配置一下
image.png
如果想要自定义负载均衡算法
要求,还是轮询,但是需要每个服务端执行五次
我们需要自定义一个算法,我们只需要自定义一个Rule,但是这个配置文件一定要在启动类的外面,不能再同一个包下
编写规则
public class MyRadomLoadBalanceRule extends AbstractLoadBalancerRule {
private int total = 0; // 总共被调用的次数,目前要求每台被调用5次
private int currentIndex = 0; // 当前提供服务的机器号
public Server choose(ILoadBalancer lb, Object key)
{
if (lb == null) {
return null;
}
Server server = null;
while (server == null) {
if (Thread.interrupted()) {
return null;
}
List<Server> upList = lb.getReachableServers();
List<Server> allList = lb.getAllServers();
int serverCount = allList.size();
if (serverCount == 0) {
/*
* No servers. End regardless of pass, because subsequent passes only get more
* restrictive.
*/
return null;
}
// int index = rand.nextInt(serverCount);// java.util.Random().nextInt(3);
// server = upList.get(index);
// private int total = 0; // 总共被调用的次数,目前要求每台被调用5次
// private int currentIndex = 0; // 当前提供服务的机器号
if(total < 5)
{
server = upList.get(currentIndex);
total++;
}else {
total = 0;
currentIndex++;
if(currentIndex >= upList.size())
{
currentIndex = 0;
}
}
if (server == null) {
/*
* The only time this should happen is if the server list were somehow trimmed.
* This is a transient condition. Retry after yielding.
*/
Thread.yield();
continue;
}
if (server.isAlive()) {
return (server);
}
// Shouldn't actually happen.. but must be transient or a bug.
server = null;
Thread.yield();
}
return server;
}
@Override
public Server choose(Object key)
{
return choose(getLoadBalancer(), key);
}
@Override
public void initWithNiwsConfig(IClientConfig clientConfig)
{
// TODO Auto-generated method stub
}
}
在客户端启动类加入注解
image.png
指明那个微服务,使用哪一种负载均衡算法,这样即可完成客户端的负载均衡
QQ群:552113611
网友评论