dubbo服务调用为何先进入到mockClusterInvoker执行

12-Dubbo服务调用过程-服务调用方式 这样当用户线程调用 Future 的 get 方法时,经过 FutureAdapter 适配,最终会调用 ResponseFuture 实现类对象的 get 方法,也就是 DefaultFuture 的 get 方法。Dubbo 支持同步和异步两种调用方式,其中异步调用还可细分为“有返回值”的异步调用和“无返回值”的异步调用。首先将运行时参数存储到数组中,然后调用 InvocationHandler 接口实现类的 invoke 方法,得到调用结果,最后将结果转型并返回给调用方。... 阅读详情

原来在学习源码的时候,没有注意到这个点,也没觉得有什么问题,但是最近忽然想到,为什么会先经过mockClusterInvoker的处理,然后再经过集群容错相关cluster的处理?

我们自己先分析一波
1.既然在调用目标方法的时候,先调用了mockClusterInvoker,那我们要看下注入的是个什么东西
2.执行链是先调用mockClusterInvoker,那我们可以认为一定是在通过@Reference注入bean的时候,这个bean类似于套娃形式,包了一层又一层,最外层是mockClusterInvoker(这里说最外面一层其实不太合适,因为debug的时候,会发现,最外面一层是InvokerInvocationHandler)
那我们有了这个推测,那就实际看下,通过@Reference注入的对象
在这里插入图片描述

可以发现,在通过@Reference注解或者dubbo:reference标签来引入一个bean的时候,引入的是一个代理对象,
这个代理对象是包装了N层,然后可以发现层次关系
那我们接下来要说的,就是在服务导出的时候,在什么时候,将mockClusterInvoker对象设置到了代理对象中

MockClusterInvoker

我之前的博客中有说过,在服务引入的时候,是会通过集群容错策略的处理,也就是failoverCluster、failbackCluster的处理(具体看配置的容错策略是什么),但是在经过容错策略处理之前,是会先经过mockClusterWrapper的处理

mockClusterWrapper是cluster的包装类,在dubbo中,包装类类似于spring中的aop,我是这么来理解的,包装类的处理,是在spi机制中完成的

com.alibaba.dubbo.config.ReferenceConfig#createPr

Dubbo原理(5)--服务调用流程 引用服务的流程:最终会为我们创建出一个代理对象; 那么代理对象如何进行方法(远程)的调用? Dubbo官方文档里面有整个调用链的图:http://dubbo.apache.org/zh-cn/docs/dev/design.html 例如: 这个对象userService确实是一个代理对象,这个代理对象层层封装了各种invoker,invoker里面是我们真正要执行的功能方法; 如何执行如下: public class InvokerInvocationHandler implemen 阅读详情

相关推荐

Dubbo源码分析 (四)之服务调用原理

目录 1:获取对应接口服务的代理类 2:委托接口代理类查找可执行的Invoker(服务提供者) 1)调用demoService.sayHello 2)proxy0.sayHello //代理执行, 3)代理执行this.handler.invoke(this, methods[0], arrayOfObject); 4)MockClusterInvoker.invoke(new RpcInvocation(method, args)).recreate(); 5)容错集群执行 Failove.

u011779268的博客 571

Dubbo源码解析:客户端服务调用过程

介绍 其实客户端服务调用过程和服务端执行请求处理的过程很类似,搞懂请求经过的Channelhandler,就明白了一大半。 如果你没有看过 Dubbo源码解析:服务提供方接收请求及返回结果 建议先看一下,这样你就能理解清楚Dubbo和Netty中Channelhandler的不同。 Netty中的Channelhandler用的是责任链模式,而Dubbo中的Channelhandler用的是装饰者模式。 常用的Handler如下 ChannelHandler 作用 NettyClientH.

小识的博客 736

国科GK7202V300芯片开发避坑指南:从uboot编译到SDK配置的12个实战问题解决

本文针对国科GK7202V300芯片开发过程中的常见难题,提供从uboot编译、SDK配置到系统部署的实战解决方案。详细解析了开发环境搭建、内核编译、驱动模块加载、根文件系统构建及烧写部署等12个关键环节的避坑指南,帮助开发者高效解决编译错误、配置冲突等典型问题,提升开发效率。

sunny的博客 234

RPA实战:手把手教你打造抖音自动养号机器人(含避坑指南)

本文详细介绍了如何利用RPA技术从零构建一个智能化的抖音自动养号机器人。内容涵盖环境准备、核心工具选型、拟人化行为流程设计、代码实现模块拆解,并提供了关键的避坑指南与风控对抗策略,帮助开发者高效、稳定地实现账号自动化运营。

orange的博客 560

RTKLIB PPP与RTK_POST精密定位实战:从实时到事后处理的完整流程解析

本文详细解析了如何使用RTKLIB进行精密单点定位(PPP)的完整流程,涵盖从实时处理到事后处理(RTK_POST)的关键步骤。文章深入探讨了数据准备、软件配置、核心参数设置(如电离层、对流层、潮汐改正)以及常见问题排查,旨在帮助用户掌握高精度GNSS定位技术,实现从入门到精通的实战应用。

weixin_29047919的博客 279

基于投影法实现扫描文件的光学字符分割——Matlab实现

投影法是指将原图像沿着某个特定的方向进行投影,得到投影线上的像素点的个数或像素值总和,从而可以得到该方向上物体的轮廓信息。对于字符分割,我们可以将图像进行水平和垂直两个方向的投影,从而得到字符之间的分割线。在OCR技术中,字符分割是非常重要的一步骤,因为字符之间的分割对字符识别的准确性有很大的影响。通过对投影值的判断,可以求出字符之间的分割线,这里我们根据垂直方向上的投影值进行判断,选取一个阈值进行筛选即可。使用sum()函数分别计算出水平和垂直方向上的投影值,得到每一行和每一列的投影值。

TechGlide的博客 581

SAP-MM-供应商对账平台(功能集合)

(1)集成OA审批,线上核销,结果写入SAP; (2)集成SRM,线上与供应商对账确认,写入SAP; (3)集成财务付款结果确认写入,OA回传结果,定时同步SRM供应商平台。 欢迎留言交流,功能完善,如需要页面设计,请订阅专栏

qq_32198063的博客 748

图文教程本地部署开源扣子Coze Studio工作流并接入 Gemini 大模型(windows亲测) Coze Studio 本地部署、Gemini 模型接入、开源 AI 工具平台、大模型工作流搭建

本文介绍了在Windows系统本地部署开源AI工具平台Coze Studio并接入Google Gemini大模型的完整教程。主要内容包括:1) 环境准备要求(Docker等);2) 获取源码和配置Gemini模型(需API密钥);3) 通过Docker Compose部署服务;4) 浏览器访问验证。文章指出该平台适合私有化部署,支持智能体和工作流搭建,但也存在插件系统不完善等局限。最后提供了相关资源链接,为开发者实现本地AI解决方案提供了实用指南。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2780

OpenHarmony电源管理驱动架构剖析:HDI框架下的低功耗实现

鸿蒙电源管理驱动模块是OpenHarmony操作系统中负责设备电源状态管理的核心组件。该模块基于HDI(Hardware Device Interface)框架实现,提供了完整的电源管理功能,包括系统休眠/唤醒、运行锁管理、休眠模式控制等核心功能。public:// 主要接口函数// 运行锁管理private:// 内部辅助函数// 成员变量public:// 运行锁控制接口// 回调管理private:// 内部辅助函数。

m0_67505153的博客 209

YOLO26涨点改进 | 检测头Head创新改进篇 | 利用DynamicConv高效动态卷积改进YOLO26检测头,DyHead通过增强检测头操作,轻量化改进、提高模型目标检测的精度

YOLO26作为新一代轻量化目标检测模型的代表,凭借精简的Backbone架构、高效的特征融合 Neck 设计,在实时检测场景(如嵌入式设备、边缘计算)中展现出优异的性能,成为工业落地与科研入门的优选模型。但在实际应用中,YOLO26原生检测头仍存在核心瓶颈:采用固定参数卷积核,无法根据输入特征的目标尺度、纹理差异动态调整卷积权重,导致多尺度目标适配不足、复杂背景下特征利用率低,且传统改进方案往往难以平衡“精度提升”与“轻量化”,要么精度提升有限,要么大幅增加参数量、拖累推理速度。

qq_36130719的博客 370

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: spring事件监听器系列三:通过ApplicationListener接口方式实现监听器源码
下一篇: 责任链设计模式
小小少年_
博客等级 码龄10年 63粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值