sentinel-请求限流、线程隔离、本地回调、熔断

发布于:2025-02-11 ⋅ 阅读:(60) ⋅ 点赞:(0)

请求限流:控制QPS来达到限流的目的

线程隔离:控制线程数量来达到限流的目录

本地回调:当线程被限流、隔离、熔断之后、就不会发起远程调用、而是使用本地已经准备好的回调去提醒用户

服务熔断:熔断也叫断路器,当失败、或者异常等情况达到了一定的阈值,就会进入断路器

请求限流

在了解请求限流需要先知道什么是QPS,QPS就是指每秒最大的并发量,也就是每秒最多接受多少个请求。


登录控制台可以看见四个小按键,第一个就是设置限流和线程隔离的

直接在这里设置单机阈值即可

线程隔离

线程隔离这个线程并不是指用户,而是机器内部的线程,用于处理资源的,具体操作与请求限流类似

与请求限流类似

本地回调

当出现被限流、隔离的情况,会造成用户的体验不佳,无法得到提示,这个时候就需要有一个本地的回调,如果发生错误、异常等情况,服务被隔离无法访问的情况下,就不再去掉哟其他服务,而是直接调用本地事先准备好的回调去提示用户。


实现

在远程调用client包下创建一个子包fallback,之后的回调都会在这个包下


一般命名是根据远程调用的名字后面加上FallbackFactory,比如我的远程调用类为UserClient,那么回调就是UserClientFallbackFactory


将交给spring管理
 @Bean
    public CartClientFallbackFactory itemClientFallback(){
        return new CartClientFallbackFactory();
    }

除了这个还需要去实现回调工厂的接口FallbackFactory<?>,泛型就是需要创建本地回调的远程服务比如FallbackFactory<CartClient>

public class CartClientFallbackFactory implements FallbackFactory<CartClient>

然后实现CartClient中的方法,每个方法都需要重写并且提供默认值(返回值)

package com.hmall.api.client.fallback;

import com.hmall.api.client.CartClient;
import org.springframework.cloud.openfeign.FallbackFactory;
import java.util.Collection;

/**
 * CartClient的回退工厂类
 * 当调用购物车服务失败时,会使用本工厂产生的回退对象进行容错处理
 */
public class CartClientFallbackFactory implements FallbackFactory<CartClient> {
    /**
     * 创建CartClient的回退实例
     * 
     * @param cause 引发回退的异常,可用于日志记录或条件判断
     * @return 一个CartClient的实现,用于在远程调用失败时提供备选方案
     */
    @Override
    public CartClient create(Throwable cause) {
        return new CartClient() {
            /**
             * 删除购物车中指定的商品
             * 
             * @param ids 要删除的商品ID集合
             * 注意:此方法在回退场景下仅提供日志输出,不执行实际的删除操作
             */
            @Override
            public void deleteCartItemByIds(Collection<Long> ids) {
                System.out.println("删除购物车失败");
            }
        };
    }
}

服务熔断

实现

直接在控制台实现即可


网站公告

今日签到

点亮在社区的每一天
去签到