美文网首页
dubbo框架原理

dubbo框架原理

作者: 加油_汤姆叔叔 | 来源:发表于2019-07-10 17:24 被阅读0次

    (1)介绍dubbo原理,暴露服务过程。
    下图是暴露服务流程:


    image.png

    首先dubbo暴露服务有两种情况:

    (1)延时暴露
    (2)非延时暴露

    下面说说非延时暴露:

    dubbo在实例化完bean之后,在刷新容器最后一步发布ContextRefreshEvent事件的时候,通知实现了ApplicationListener的类执行回调onApplicationEvent,该事件会调用ServiceConfig的export方法,此export就是服务暴露。总体来说dubbo的服务就在onApplicationEvent事件中发布
    那么dubbo是如何在onApplicationEvent中发布服务的呢?

    暴露流程

    (1)首先将服务封装成invoker,换句话说invoker中封装了服务的实现类。
    (2)将invoker封装成exporter并缓存起来,缓存中使用invoker的url作为key。
    (3)服务端Server启动并监听窗口(当请求过来时,根据请求信息生成key,并去缓存中寻找相应的invoker,如果找到了invoker就完成了调用)。

    export的步骤简单介绍

    (1)首先会检查各种配置信息,填充属性。
    (2)加载注册中心
    (3)根据配置的所有协议和注册中心url分别进行服务暴露(本地服务/远程服务)
    (3.1)首先要获取invoker
    (3.2)生成Exporter,并进行缓存
    此处所有协议和注册中心的意思,我的理解是:需要一个应用层程序进行进程间通信,注册中心是将生成好的Exporter推送到注册中心,即将服务提交至注册中心

    export方法中加载注册中心的工作细节

    (1)export方法会判断是否是延迟暴露,如不是则立即执行doExport方法。
    (2)doExport方法中会执行一系列的检查方法,然后调用doExportUrls方法。
    (3)doExportUrls方法会首先调用loadRegistries获取所有注册中心url。

    export方法中根据配置的协议进行服务暴露的工作细节

    (1)获取所有注册中心之后,会遍历调用doExportUrldFor1Protocol方法,此方法根据不同的协议将服务转换成url形式,一些参数配置参数会附在url后面。
    (2)根据scope的值进行服务暴露(即暴露/远程暴露/本地暴露)。

    export方法中将服务暴露为远程服务的工作细节

    (1)利用动态代理技术,将服务接口生成代理。
    (2)调用Protocol生成的适配类的export方法,将服务接口代理交给export处理。
    (3)export方法按照上述的工作流程,完成对服务的暴露。

    个人理解:invoker的存在是生成代理类,这样消费者调用服务时候不会直接调用本地实例。而export的过程是标准化的一个过程,通过配置的协议将服务调用,服务信息标准化。

    sentinel进行熔断,限流的原理以及流程

    首先搞清楚熔断与限流的区别:
    A->B->C 表示调用关系。
    当B->C的时候发生突发流量的访问,

    相关文章

      网友评论

          本文标题:dubbo框架原理

          本文链接:https://www.haomeiwen.com/subject/dkffkctx.html