三、dubbo原理详解

标签: dubbo服务发布原理 dubbo dubbo消费原理 dubbo详解 dubbo原理
9人阅读 评论(0) 收藏 举报
分类:

一、dubbo服务发布原理图:


根据service中配置的配置文件,如:spring-provider.xml

随着dubbo配置文件的加载,配置文件中的信息就会被dubbo使用,ServiceConfig就会读取到ref(com.xp.UserService),然后通过ProxyFactory去getInvoker()或getProxy()创建一个AbstractProxyInvoker实例(Invoker)。

@Extension("javassist")    
public interface ProxyFactory {    
    
    //针对client端,创建出代理对象    
    @Adaptive({Constants.PROXY_KEY})    
    <T> T getProxy(Invoker<T> invoker) throws RpcException;    
    
    //针对server端,将服务对象如HelloServiceImpl包装成一个Invoker对象    
    @Adaptive({Constants.PROXY_KEY})    
    <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) throws RpcException;    
    
}   

Exporter主要是打开socket监听服务,接收客户端的各种请求。(是Invoker的生命周期管理类)

从上面得知服务发布的第一个过程就是:使用ProxyFactory将UserServiceImpl封装成一个本地执行的Invoker。
执行这个服务,即执行这个本地Invoker,即调用这个本地Invoker的invoke(Invocation invocation)方法,方法的执行过程就是通过反射执行了UserServiceImpl的内容。现在的问题是:这个方法的参数Invocation invocation的来源问题。
针对server端来说,Protocol要解决的问题就是:根据指定协议对外公布这个UserService服务,当客户端根据协议调用这个服务时,将客户端传递过来的Invocation参数交给上述的Invoker来执行。所以Protocol加入了远程通信协议的这一块,根据客户端的请求来获取参数Invocation invocation。

先来看下Protocol的接口定义:

@Extension("dubbo")    
public interface Protocol {    
        
    int getDefaultPort();    
    //针对server端来说,将本地执行类的Invoker通过协议暴漏给外部。这样外部就可以通过协议发送执行参数Invocation,然后交给本地Invoker来执行    
    @Adaptive    
    <T> Exporter<T> export(Invoker<T> invoker) throws RpcException;    
        //这个是针对客户端的,客户端从注册中心获取服务器端发布的服务信息    
    //通过服务信息得知服务器端使用的协议,然后客户端仍然使用该协议构造一个Invoker。这个Invoker是远程通信类的Invoker。    
    //执行时,需要将执行信息通过指定协议发送给服务器端,服务器端接收到参数Invocation,然后交给服务器端的本地Invoker来执行    
    @Adaptive    
    <T> Invoker<T> refer(Class<T> type, URL url) throws RpcException;    
    void destroy();    
} 
  1. export(Invoker invoker)的过程即根据Invoker中url的配置信息来最终选择Protocol的实现,默认实现是"dubbo"的扩展实现即DubboProtocol,然后再对DubboProtocol进行依赖注入,进行wrap包装。 
  2. 可以看到在返回DubboProtocol之前,经过了ProtocolFilterWrapper、ProtocolListenerWrapper、RegistryProtocol的包装。  
  3. 所谓的包装就是如下类似的内容:
  4.  package com.alibaba.xxx;    
            
        import com.alibaba.dubbo.rpc.Protocol;    
             
        public class XxxProtocolWrapper implemenets Protocol {    
            Protocol impl;    
             
            public XxxProtocol(Protocol protocol) { impl = protocol; }    
             
            // 接口方法做一个操作后,再调用extension的方法    
            public Exporter<T> export(final Invoker<T> invoker) {    
                //... 一些操作    
                impl .export(invoker);    
                // ... 一些操作    
            }    
             
            // ...    
        }   

     

二、dubbo消费原理


1、项目启动以后,随着配置文件Spring-customer.xml加载,ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例(如上图中的红色部分),这是服务消费的关键。

接下来把Invoker转换为客户端需要的接口(如:HelloWorld)

2、用到的主要技术:动态代理,反射技术


查看评论

27. Dubbo原理解析-管理控制台

Dubbo的dubbo-admin模块是后台管理系统,它的MVC框架式基于webx3的,webx是阿里巴巴开源出来基于页面驱动的mvc框架, webx在阿里内部广泛使用。 Webx是基于turbine...
  • u010311445
  • u010311445
  • 2014-12-12 17:35:26
  • 4900

Dubbo解析及原理浅析

一、Duboo基本概念解释Dubbo是一种分布式服务框架。 Webservice也是一种服务框架,但是webservice并不是分布式的服务框架,他需要结合F5实现负载均衡。因此,dubbo除了可以提...
  • chao_19
  • chao_19
  • 2016-06-26 20:06:57
  • 68717

(三)dubbo工作原理

dubbo主要核心部件 Remoting:网络通信框架,实现了sync-over-async和request-response消息机制。 RPC:一个远程过程调用的抽象,支持负载均衡、容灾和集群功...
  • lovesummerforever
  • lovesummerforever
  • 2015-09-21 18:58:38
  • 12603

26. Dubbo原理解析-监控

Dubbo发布代码中,自带了一个简易的监控中心实现。对于一般的小业务这个监控中心应该能够满足需求,对于那些大业务量的大公司一般都会有自己的监控中心,更加丰富的功能如常用的报警短信通知等等。这章讲解分析...
  • u010311445
  • u010311445
  • 2014-12-12 17:17:51
  • 7164

聊聊Dubbox(三):架构原理

原文:http://www.jianshu.com/p/7399effb192a 无论是Dubbo还是Dubbox,包括在之前《聊聊Dubbox(一):为何选择》中介绍的其他框架,其本质都是远程调用...
  • I_will_try
  • I_will_try
  • 2017-07-27 17:43:42
  • 822

Dubbo+zookeeper+(Java)实现分布式系统----zookeeper入门和使用介绍

一.zookeeper分布式服务框架 详情见http://www.cnblogs.com/ggjucheng/p/3370359.html 1.主要用来解决分布式集群中应用系统的一致性问题,它能提...
  • qq_28511781
  • qq_28511781
  • 2017-07-23 22:20:06
  • 1426

Dubbo入门-分布式原理详解--搭建一个最简单的Demo框架

Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起。 1,单一应用框架(ORM)  当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部...
  • xfl4629712
  • xfl4629712
  • 2017-10-25 17:26:26
  • 296

9. Dubbo原理解析-服务引用

服务引用是服务的消费方向注册中心订阅服务提供方提供的服务地址后向服务提供方引用服务的过程。 服务的应用方在spring的配置实例如下: dubbo:reference id="demoService"...
  • u010311445
  • u010311445
  • 2014-12-01 19:40:49
  • 6344

Dubbo基本原理机制

分布式服务框架: –高性能和透明化的RPC远程服务调用方案 –SOA服务治理方案 -Apache MINA 框架基于Reactor模型通信框架,基于tcp长连接 Dubbo缺省协议采用单一长连接和N...
  • paul_wei2008
  • paul_wei2008
  • 2014-02-17 21:37:13
  • 42418

Dubbo原理简单分析

alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo、hsf),jms消息服务(napoli、notify),KV数据库(tair)等。这个框架/工具/产...
  • he90227
  • he90227
  • 2017-04-13 13:04:16
  • 2906
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 2万+
    积分: 632
    排名: 8万+
    博客专栏