SpringCloud学习记录(二)负载均衡,服务熔断,服务降级,服务限流

本文详细介绍了在SpringCloud中如何使用Ribbon进行负载均衡,并深入理解服务熔断、服务降级的概念。通过Hystrix实现服务熔断和降级,同时探讨了Sentinel作为新一代的熔断降级工具的使用方法。文中还包含了服务限流的讨论,以及在微服务消费者端如何进行服务调用和降级处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ribbon实现负载均衡

负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。

  1. 导入pom依赖

单独导入

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            <version>2.2.1.RELEASE</version>
  </dependency>

整合依赖spring-cloud-starter-netflix-eureka-client里面也包含了ribbon的依赖

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.1.RELEASE</version>
  </dependency>
  1. 在主启动类所在包的上一级创建一个包,用来创建自定义负载均衡策略类
    在这里插入图片描述
    书写自定义负载均衡策略类,先继承AbstractLoadBalancerRule抽象类,该类是IRule接口的一个抽象实现类,继承它,然后自定义自己的负载均衡策略,注入spring容器即可覆盖原有的轮询策略。
    在这里插入图片描述
public class HcodeRule extends AbstractLoadBalancerRule {
   
    //每个服务,访问5次,然后循环所有服务
    private AtomicInteger total = new AtomicInteger(0); //服务被调用的次数
    private AtomicInteger currentIndex = new AtomicInteger(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) {
   

                return null;
            }
//            //生成区间随机数
//            int index = chooseRandomInt(serverCount);
//            server = upList.get(index); //从或者的服务中随机获取一个
            /*============================================*/
            if(total.get()<5){
   
               server = upList.get(currentIndex.get());
                getAndIncrement(total);
            }else{
   
                total.set(0);
                getAndIncrement(currentIndex);
                if(currentIndex.get()>=upList.size()){
   
                    currentIndex.set(0);
                }
                server = upList.get(currentIndex.get());
                getAndIncrement(total);
            }

            /*==============================================*/
            if (server == null) {
   
                Thread.yield();
                continue;
            }

            if (server.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值