Spring Cloud-Ribbon学习

Spring Cloud-Ribbon学习,第1张

Spring Cloud-Ribbon学习

在学习Ribbon之前,我们考虑一个问题:当服务器访问量过大导致服务器奔溃应该怎么解决?

主要可以通过以下俩种途径进行解决:
1、提高服务器的性能指标,无外乎就是CPU、内存与磁盘IO。主要可以从优化代码、优化数据库和尽可能的使用静态数据入手。
2、增加服务器的数量,通俗的讲就是多部署几套服务,哪个服务空闲、压力小就优先访问哪台服务器。

Ribbon

前提了解:
Ribbon其实就是一个负载均衡的客户端组件,他可以和其他所需的客户端组件进行结合使用,优先选择其中负载较小的服务进行使用。
Ribbon常用的负载均衡的算法
Ribbon(默认)+Eureka结合使用
1、引入POM文件
2、集群版Eureka服务端配置信息

3、配置访问Http服务的方法
若使用默认的负载均衡注解需要将访问的地址通过服务名代替。
4、编写Controller进行

5、启动项目测试接口
访问/getUser:

访问使用负载均衡进行访问的接口/resfulUser:
使用默认的负载均衡算法一个注解即可!
Ribbon(自定义负载均衡算法)+Eureka结合使用
自定义负载均衡的算法主要区别是:
1、增加Ribbon的配置文件

2、启动类增加注解属性

3、增加Controller测试接口,当前我们已经将负载均衡算法自定义为随机

4、请求接口4次结果

则:自定义的随机算法已经修改成功!
以上的Ribbon自定义注解,其实就是将默认的负载均衡算法,修改成Ribbon的其他负载均衡算法。接下来我们自己定义一个负载均衡的算法:
定义一个接口:
实现计数功能,并进行服务选择:

@Component
public class MyLB implements LoadBalancer {

    // 请求进来方法是多线程的,所以请求计数需要原子类进行计数,保证请求结果的正确性
    private AtomicInteger atomicInteger = new AtomicInteger(0);

    @Override
    public ServiceInstance instance(List serviceInstances) {
        int index =  getAndIncrement()%serviceInstances.size();
            return serviceInstances.get(index);
    }
    
    public final  int getAndIncrement(){
        int crrent;
        int next;
        do{
            crrent = this.atomicInteger.get();
            next = crrent >= 99 ? 0 : crrent + 1;
        }while (!this.atomicInteger.compareAndSet(crrent,next));
        System.out.println("获取的next的值为:" + next);
        return next;
    }
}

Controller层进行选择服务 *** 作:
测试结果:

使用自己的算法,需要将@LoadBalanced注解注释掉,原因是:此注解是将Ribbon与访问Http请求结合使用,是通过服务名建立连接,而我们的是通过IP进行建立请求,故会出错。

后续可以和其它服务注册中心结合使用!

欢迎大家关注我的微信公众账号:小鱼说编程

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5659382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存