首页 > 其他分享 >Sentinel system-rule不生效问题处理

Sentinel system-rule不生效问题处理

时间:2023-03-09 15:22:22浏览次数:48  
标签:count prioritized args system rule resourceWrapper context Sentinel Throwable

sentinel1.8.6

一直以为自己配置问题, 最后debug发现com.alibaba.csp.sentinel.slots.logger.LogSlot这里记录日志时NPE了

原来的代码:

@Override
public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode obj, int count, boolean prioritized, Object... args)
    throws Throwable {
    try {
        fireEntry(context, resourceWrapper, obj, count, prioritized, args);
    } catch (BlockException e) {
        EagleEyeLogUtil.log(resourceWrapper.getName(), e.getClass().getSimpleName(), e.getRuleLimitApp(),
                            context.getOrigin(), e.getRule().getId(), count);
        throw e;
    } catch (Throwable e) {
        RecordLog.warn("Unexpected entry exception", e);
    }

}

e.getRule().getId(), 此处SystemBlockException没有提供rule

修改后的代码:

@Override
public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode obj, int count, boolean prioritized, Object... args)
    throws Throwable {
    try {
        fireEntry(context, resourceWrapper, obj, count, prioritized, args);
    } catch (BlockException e) {
        EagleEyeLogUtil.log(resourceWrapper.getName(), e.getClass().getSimpleName(), e.getRuleLimitApp(),
                            context.getOrigin(), Optional.ofNullable(e.getRule()).map(AbstractRule::getId).orElse(null), count);
        throw e;
    } catch (Throwable e) {
        RecordLog.warn("Unexpected entry exception", e);
    }
}

修改源码肯定是不合适的, 具体做法如下:

  1. 在自己的项目下新建同名包同名类
  2. 将源码中的代码copy并修改上述代码, 以达到覆盖的目的(知识点涉及java类加载机制)

总结:

  1. 上述方案是因为我们没有采集规则的需求, 如果有, 可以修改覆盖此两处处代码

    com.alibaba.csp.sentinel.slots.system.SystemRuleManager#checkSystem+com.alibaba.csp.sentinel.slots.system.SystemBlockException

  2. sentinel master分支已修改, 但是未发版, 见PR 2908

标签:count,prioritized,args,system,rule,resourceWrapper,context,Sentinel,Throwable
From: https://www.cnblogs.com/liangyun/p/17198543.html

相关文章

  • systemd-nspawn 运行 centos7
    参考链接:https://www.shuzhiduo.com/A/E35p0VQE5v/建一个chroot的目录,例如:mkdir-p/path/to/chroot初始化rpm数据库:mkdir-p/path/to/chroot/var/lib/rpmrpm-......
  • gateway整合Sentinel实现资源限流
    转:整合Sentinel实现资源限流整合Sentinel实现资源限流 SpringCloudGateway默认为我们提供了一种限流方法:RequestRateLimiterGatewayFilterFactory。但这种方法实......
  • iview 动态表单验证 FormItem prop rules v-show 动态表单校验
    iview动态表单验证FormItemproprulesv-show重点1用v-show控制显示隐藏重点2prop指定字段重点3:rules动态指定规则<divv-show="isShow"><FormItem......
  • 命令查看windows系统软硬件信息(systeminfo、wmic系列)
    1、systeminfo(查看计算机的基本信息,包括计算机名、网络适配器信息等)    2、wmic系列(可以将brief替换为full获得更加详细的信息)wmicdiskdrivelistbrief(查......
  • VirtualFileSystem
    物理的文件有wwwroot下文件(JS\CSS\html居多),DLL嵌入的资源(json文件居多),Razor文件,如何操作这些文件呢,首先先表示这个文件抽象(IFileInfo )IFileInfo表示给定文件提供程序......
  • MIT 6.1810 Lab:system calls
    lab网址:https://pdos.csail.mit.edu/6.828/2022/labs/syscall.htmlxv6Book:https://pdos.csail.mit.edu/6.828/2022/xv6/book-riscv-rev3.pdfUsinggdb总体感觉,对xv6的调......
  • 如何使用 journalctl 查看和分析 systemd 日志(附实例)
    本指南介绍了systemd的journalctl工具及其各种命令的基础知识。你可以使用这些命令对Linux中的桌面和服务器日志进行故障诊断。以下是如何使用journalctl查看和分......
  • 调用Android原生@SystemApi、@Hide方法
      系统api.png如上图所示,PackageManager.getPermissionFlags()方法是被@SystemApi注解修饰过的方法,@SystemApi只允许systemapp调用或者用反射方法调用,反射方......
  • C:\Windows\System32\drivers\etc\hosts中的文件修改后无法保存
    这个文件定义了IP地址和主机名的映射关系。我们对其进行修改保存时显示没有权限无法保存,我们可以通过以下步骤解决。1、选中hosts文件,右键点击属性。2、在属性面板点击安......
  • redis sentinel 部署
    redissentinel部署服务器说明192.168.2.200masterredis-serverredis-sentinel192.168.2.201slave1redis-serverredis-sentinel192.168.2.202slave2r......