Soul源码中dubbo和sofa的执行过程

Soul源码中dubbo和sofa的执行过程

Soul源码中dubbo的执行过程

  • 首先在 soul-examples-apache-dubbo-service 中依赖的soul-client中ApacheDubboServiceBeanPostProcessor对注解SoulDubboClient了向soul-admin中的 http://localhost:9095/soul-client/dubbo-register 进行了注册。而此处我们注意到ApacheDubboServiceBeanPostProcessor并不是实现的BeanPostProcessor接口而是实现的ApplicationListener 即Spring上下文刷新的事件
  • 在该对应的接口中执行的是与前文相同的利用Spring的事件处理机制进行的数据同步操作,将数据同步到了网关soul-bootstrap,这一部分,可参考zookeeper的数据同步机制进行了解
  • 紧接着是在客户端发起对dubbo接口的请求的代理时,soul是如何处理的,处理的逻辑主要是

通过泛化调用,调用的实际上是zk内的某个service然后异步获取结果。将结果,封装到具体的字段中,然后返回给前端

整个过程中对于接口的缓存的处理与http的请求基本相同,从这里就可以看出soul的设计的情况非常好

Soul源码中Sofa项目的执行过程

  • 同样的,第一步还是通过扫描注解通过依赖的soul-client中SofaServiceBeanPostProcessor对注解SoulDubboClient了向soul-admin中的 http://localhost:9095//soul-client/sofa-register 进行了注册/soul-client/sofa-register,而这个类中使用的并不是与dubbo相同的事件处理器接口,而是与http请求相同的实现了BeanPostProcessor的接口对注解和参数等进行的处理,这是一个需要考虑的点,目前我还不是太清楚,后续需要再深入了解。
  • 随后的流程与Http和dubbo的流程基本相同,即在该对应的接口中执行的是与前文相同的利用Spring的事件处理机制进行的数据同步操作,将选择器规则数据同步到了网关soul-bootstrap,这一部分几乎所有插件都一样。
  • 后面同样的是和dubbo相同的泛化调用的过程,不同的是dubbo的泛化调用是异步的调用,而sofa的泛化调用是异步的调用,从这一点上来说,在soul中使用dubbo或许性能更好。
        genericService.$invoke(metaData.getMethodName(), pair.getLeft(), pair.getRight());        return Mono.fromFuture(future.thenApply(ret -> {            if (Objects.isNull(ret)) {                ret = Constants.SOFA_RPC_RESULT_EMPTY;            }            exchange.getAttributes().put(Constants.SOFA_RPC_RESULT, ret);            exchange.getAttributes().put(Constants.CLIENT_RESPONSE_RESULT_TYPE, ResultEnum.SUCCESS.getName());            return ret;        })).onErrorMap(SoulException::new);

关于ApacheDubboServiceBeanPostProcessor并不是实现的BeanPostProcessor接口而是实现的ApplicationListener 的问题

在类中的onApplicationEvent中有对应issue中有对应的https://github.com/dromara/soul/issues/415答疑,主要是上传的顺序跟dubbo暴露的顺序问题导致的。使用beanPostProcessor可能导致no provider的情况。

欢迎搜索关注本人与朋友共同开发的微信面经小程序【大厂面试助手】和公众号【微瞰技术】,以及总结的分类面试题https://github.com/zhendiao/JavaInterview

(0)

相关推荐

  • Mybatis中mapper相关注解解析类详解

    上一篇文章分析发现解读mapper关键是两个类MapperAnnotationBuilder和XMLMapperBuilder,今天先来看MapperAnnotationBuilder. 基础介绍 根 ...

  • Dubbo常见题目

    前言 我会列举一些常见的 Dubbo 面试题,只会抓着重的,一些太简单的我就不提了. 不仅仅给你面试题的答案,也会剖析面试官问这个问题的原因,也就是他的内心活动. 想从你这里问出什么?想要什么答案?想 ...

  • 如何记忆 Spring Bean 的生命周期

    如何记忆 Spring Bean 的生命周期

  • 【Soul源码探秘】插件链实现

    文章首发于 CSDN个人博客 引言 插件是 Soul 的灵魂. Soul 使用了插件化设计思想,实现了插件的热插拔,且极易扩展.内置丰富的插件支持,鉴权,限流,熔断,防火墙等等. Soul 是如何实现 ...

  • 如何将画线指标改为选股公式,怎么从源码中提取,建议认真研读

    炒股时如何在亏损中成长 1.你要截图,写明当时买入的原因(当时的实际想法,不是今天的),和今天卖出的原因. 2.对照当初的止损点,研究一下止损位置是否合适. 3.最关键的,问一下自己,为什么没有止损. ...

  • 电商直播源码中的动态话题增加了用户互动性,如何使用?

    直播行业演变到今天便捷的操作是经历了市场考验,不断地升级完善后得到的,其中的动态话题功能已经成为了直播程序的一大特色,并且提高了用户的互动性,今天就带大家唠一唠在电商直播源码的搭建中动态话题功能是如何 ...

  • 在线教育平台源码中的直播间应该是什么样的?

    部分教育行业转战在线课堂不是一两天了,从疫情开始到现在,不少教培机构用线上方式开展各种直播课.录播课,小到育儿教育,大到成人教育,越来越多教育行业的戏份领域加入到在线教育的行业中. 那么,作为线上教育 ...

  • 直播系统的顶梁柱:视频直播源码中的礼物功能

    我们了解的直播系统功能是十分的实用且丰富的,一般来说,视频直播源码自带的功能有:直播功能.私信功能.邀请奖励.财务管理功能.短视频功能.直播PK功能.多种礼物功能.分享功能.拉黑功能.带货商城功能.家 ...

  • 直播短视频源码中不容易引人注目但很实用的小功能

    随着某音某手的发布,短视频似乎已经默认成为了我们生活的一部分,他给我们带来的不仅仅是消磨时光,更多的正能量内容也在潜移默化的影响着我们,而且在直播短视频源码的开发中,有很多不容易引人注目但却很实用的小 ...

  • 飞凌嵌入式技术分享-高效学习Linux内核——从源码中的宏下手

    在阅读Linux内核代码时,在代码的开头总是有各种各样的宏定义,了解熟悉这些宏定义,对于代码的理解和快速修改代码提供了便利.有些宏相对简单,一眼便可以了解作用,有些就稍微复杂一些,需要一些逻辑,今天就 ...

  • 在线教育源码:在线教育平台开发中的具体情况分析

    随着互联网的快速发展,在线教育也受到了各行各业的喜爱,它在我们学习的过程中可谓是发挥了大作用的,只有不断学习,才能不被时代所落下,在线教育平台开发也正是基于这一亩地而出现的.让我们来具体分析一下它吧. ...

  • 网校系统源码:教育直播app开发中的双师教学优缺点

    与传统的线下课堂,线上教课方式相比,双师大班课可以说是非常有特色的,自从有了双师课堂的存在,对于学生的学习,或者是老师的教导,家长的监督来说,可谓是如虎添翼,教育直播app开发中,双师教学是不可缺少的 ...