dubbo学习

Posted thinkqin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo学习相关的知识,希望对你有一定的参考价值。

最近看了一遍dubbo的源码,也正好阿里的中间件比赛初赛是dubbo的 loadbalance 方法,所以先整理下dubbo的知识。

服务治理并不是最近才提出的概念,从java服务的前后端分离开始到现在的微服务模式,远程服务调用能力就是必须的了,webservice等的方式效率性能开发难度都远远跟不上要求。简单的远程调用可以有rmi等方式,但是数量巨大的服务,跨部门的服务调用,服务错误处理等等要求下,服务治理框架也就是必须的了,初期,不少公司应该也是自己开发过服务治理的中间件,我也看过几个服务治理中间件的源码,其中dubbo是阿里开源出来的,功能比较强大,可扩展性比较强,对于我个人来说,是学到了一些新的设计模式和思路,故而整理一下。据说阿里内部已经不用dubbo,后续有机会再学习下hsf。

基本用法和说明参考dubbo官方说明文档:    http://dubbo.apache.org/zh-cn/docs/user/preface/architecture.html

技术图片

 

 看一遍代码的主流程:

1. pre

  代码入口:

      配置方式:    <dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" /> //注册中心

                         <dubbo:reference id="asyncService" interface="org.apache.dubbo.samples.governance.api.AsyncService"> <dubbo:method name="sayHello" async="true" /> </dubbo:reference>

       <dubbo:service interface="org.apache.dubbo.samples.governance.api.AsyncService" ref="asyncService"/> 等等等

      以xml配置方式为例子,代码在dubbo-config 包的dubbo-config-spring 包里 class DubboNamespaceHandler extends NamespaceHandlerSupport(spring提供可以查资料)  定义dubbo的namespace,

       这个类里注册不同的标签的解析类,不同的解析类将xm配置实例化成了spring的bean。例如 RegistryConfig ReferenceBean ServiceBean  等

   可配置化实现:  SPI接口  ExtensionLoader 等

2 .Provider: ServiceBean

服务暴露:

 Service Config-> doExportUrls();

         interfaceClass,url->invoker

List<protocols>  -> export(invoker)-> 以dubbo协议为例 openServer()->ServerMap.get() or createServer ->(headerExchange)   exchanger.bind(url,hander) ->

  Transporter.bind()->nettyServer->open

     exports.add (exports), urls.add(url)

<dubbo:protocol name="dubbo" port="20880" />

<dubbo:protocol name="rmi" port="1099" />

被调用:

 ExchangeHandlerAdapter(abstract) -》exprort-> invoker->invoker.invoke

再来看看这个invoker 怎么实现的:以javaassistProxyFactory 为例子 invoker 用反射方式实现,配置的文件指定 bean和 interface  Wrapper包装类,doInvoker 调用wrapper的doInvokeMethod

Wrapper的makeWrapper方法,创造了Wrapper类。

3.consumer:

调用服务:

 继承spring的FactoryBean -》getObject-》init()-》createProxy-》invoker(类似) -》publishconsumer 到注册地址

invoker : REF_PROTOCOL.refer->clientserver-> (nettyserver)

4 服务注册

provider写信息到注册中心,启动,停服务

client写信息,并监听数据变化

 

以上是关于dubbo学习的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo学习 Dubbo原理浅析

Dubbo 项目学习 接口抽取以及依赖版本统一

dubbo框架-学习-dubbo原理

Dubbo学习(Dubbo2.6)

Dubbo 项目学习 发布Dubbo服务

dubbo学习dubbo监控中心