sentinel整合dubbo实现统一降级

统一降级策略

在我们之前的博客里介绍了dubbo如何整合sentinel进行限流。既然用到了限流,那么每次让被限流的服务都抛一个异常让调用端自己处理显然不是优雅的解决方案,在者一些带有业务含义的降级策略只有在服务提供方才能完成,这时候我们就需要引入sentinel的降级能力。sentinel官方文档推荐的做法是使用注解。这种方法比较灵活但缺点是降级的代码比较分散,代码量也比较多,这时候我们需要一种全量的降级策略,将降级的逻辑集中起来,或者极端情况下一个provider的所有服务都可以使用同一个降级策略(比如返回null)。官方文档里并没有提及这样的降级方法,下面我们来探索如何实现上述逻辑。


从源码入手

解决问题的最好方式就是从源码入口,dubbo的扩展点在于filter,sentinel也是通过一个filter与dubbo做了整合

com.alibaba.csp.sentinel.adapter.dubbo.SentinelDubboProviderFilter

@Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
   
        // Get origin caller.
        String application = DubboUtils.getApplication(invocation, "");

        Entry interfaceEntry = null;
        Entry methodEntry = null;
        try {
   
            String resourceName = DubboUtils.getResourceName(invoker, invocation);
            String interfaceName = invoker.getInterface().getName();
            // Only need to create entrance context at provider side, as context will take effect
            // at entrance of invocation chain only (for inbound traffic).
            ContextUtil.enter(resourceName, application);
            interfaceEntry = SphU.entry(interfaceName, ResourceTypeConstants.COMMON_RPC, EntryType.IN);
            methodEntry = SphU.entry(resourceName, ResourceTypeConstants.COMMON_RPC,
                EntryType.IN, invocation.getArguments());

            Result result = invoker.invoke(invocation);
            if (result.hasException()
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值