Dubbo模块介绍
一、Dubbo 整体框架

Dubbo主要有:Config 配置层、Proxy服务代理层、Registry注册中心层、Cluster 路由层、Monitor监控层、Protocol远程调用层、Exchange信息交换层、Transport 网络传输层、Serialize数据序列化层几个模块构成。
二、Dubbo 的各个角色




如上图所示,一个抽象出来的基本框架,consumer和provider是框架中必然存在的,Registry做为全局配置信息管理模块,推荐生产环境使用Registry,可实时推送现存活的服务提供者,Monitor一般用于监控和统计RPC调用情况、成功率、失败率等情况,让开发及运维了解线上运行情况。
应用执行过程大致如下:
服务提供者启动,根据协议信息绑定到配置的IP和端口上,如果已有服务绑定过相同IP和端口的则跳过
注册服务信息至注册中心
客户端启动,根据接口和协议信息订阅注册中心中注册的服务,注册中心将存活的服务地址通知到客户端,当有服务信息变更时客户端可以通过定时通知得到变更信息
在客户端需要调用服务时,从内存中拿到上次通知的所有存活服务地址,根据路由信息和负载均衡机制选择最终调用的服务地址,发起调用
通过filter分别在客户端发送请求前和服务端接收请求后,通过异步记录一些需要的信息传递到monitor做监控或者统计
三、模块介绍
3.1 dubbo-config 配置层
作用:
负责所有dubbo相关的xml配置和注释配置转换为config对象 ( dubbo.xsd )
Api配置的对象类,用于生成对应的register,protocol等对象
核心类:
ServiceBean、ReferenceBean (对应<dubbo:service /> <dubbo:reference/>)
ProtocolConfig、RegisterConfig (<dubbo:protocol /> <dubbo:register />)
3.2 dubbo-rpc
Proxy 服务代理层
作用:
负责生成消费者的代理对象,以及服务提供方的Invoke
核心类:
ProxyFactory接口的2种实现 JdkProxyFactory JavassistProxyFactory
3.3 dubbo-registry
Registry注册中心层
作用:
负责服务注册与查询服务,以及注册服务的本地缓存
支持多种协议注册发现服务,例如redis、zookeeper、Multicast
核心类:
接口 RegistryFactory、Registry
AbstractRegistry 以及 ZookeeperRegistry、ZookeeperRegistryFactory
3.4 dubbo-cluster
Cluster 路由层
作用:
负责负载均衡的策略,以及失败策略
缺省设置:RandomLoadBalance,FailoverCluster
支持轮询、随机、一致性哈希等负载均衡策略
核心类:
接口 LoadBalance、Cluster
RandomLoadBalance以及 RoundRobinLoadBalance等
3.5 dubbo-monitor
Monitor监控层
作用:
RPC调用次数和调用时间监控
dubbo-simple 下面的dubbo-monitor-simple提供了简单的控制台
核心类:
核心类DubboMonitor、Statistics
3.6 dubbo-rpc
Protocol远程调用层
作用:
封将RPC调用、支持多种RPC协议,不包含IO通信部分
支持RMI 、Hessian、Http、Webservice、thrift等rpc调用方式
核心类:
接口 Protocol Exporter Invoker
DubboProtocol、DubboInvoker、DubboExporter、DubboCodec
3.7 dubbo-remoting
Exchange信息交换层
作用:
封装请求响应模式,同步转异步
处理各种协议的通信请求,支持netty、mina、http等
默认采用Netty进行通信
核心类:
接口 Server、Channel、Client
NettyClient、NettyServer
3.8 dubbo-common
Serialize数据序列化层
作用:
数据序列化层和可复用的一些工具,包括序列化线程池等
dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为json
核心类:
接口 ThreadPool、Serialization
FixedThreadPool、 Hessian2Serialization
四、Dubbo使用方式:
4.1 Main函数的生产者和消费者
适用于纯后台服务集群
全部采用长连接
启动方式:com.alibaba.dubbo.container.Main
默认加载 META-INF/spring/*.xml
4.2 Java与Tomcat 生产者消费者
适用于大型web应用拆分服务
后台Main方法提供服务与tomcat Web应用消费者结合
用web.xml解析所有xml,加载dubbo
4.3 Xml 配置与代码配置
生产者
:
Xml : <dubbo:register/> Api: RegisterConfig
Xml : <dubbo:application/> Api: ApplicationConfig
Xml : <dubbo:protocol/> Api: ProtocolConfig
Xml : <dubbo:service/> Api: ServiceConfig
消费者
:
Xml : <dubbo:register/> Api: RegisterConfig
Xml : <dubbo:application/> Api: ApplicationConfig
Xml : <dubbo:reference/> Api: ReferenceConfig
Dubbo模块介绍的更多相关文章
- Dubbo入门介绍---搭建一个最简单的Demo框架
Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbozookeeper 更多 个人分类: D ...
- webkit模块介绍
一.Webkit模块 用到的第三方库如下: cairo 一个2D绘图库 casqt Unicode处理用的库,从QT中抽取部分代码形成的 expat 一个XML SAX解析器的库 freety ...
- 【液晶模块系列基础视频】1.2.iM_RGB模块介绍
[液晶模块系列基础视频]1.2.iM_RGB模块介绍(上) [液晶模块系列基础视频]1.2.iM_RGB模块介绍(下) ============================== 技术论坛:http ...
- 【液晶模块系列基础视频】1.1.iHMI43模块介绍
[液晶模块系列基础视频]1.1.iHMI43模块介绍(上) [液晶模块系列基础视频]1.1.iHMI43模块介绍(下) ============================== 技术论坛:http ...
- CSS3_概述、发展史、模块介绍、与浏览器之间的关系
一.CSS3概述和CSS3的发展史: 1.css3概述: CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能. 目前主流浏览器chrome.safari. ...
- 嵌入式系统图形库GUI核心模块介绍
本文转载自:http://blog.csdn.net/xteda/article/details/6575278 (作者 冯青华 信庭嵌入式工作室(www.xteda.com)- CEO Blog:h ...
- IIS7 常用模块介绍说明
1.1.0 IIS常用的功能模块介绍: 1) 静态内容:可发布静态 Web 文件格式,比如 HTML 页面和图像文件. 2) 默认文档:允许您配置当用户未在 URL ...
- python模块介绍- multi-mechanize 性能测试工具
python模块介绍- multi-mechanize 性能测试工具 2013-09-13 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 3739 ...
- python模块介绍- xlwt 创建xls文件(excel)
python模块介绍- xlwt 创建xls文件(excel) 2013-06-24磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 ...
随机推荐
- php大转盘抽奖
抽奖大转盘演示:http://www.sucaihuo.com/php/3301.html function getRand($proArr, $proCount) { $result = ''; $ ...
- 玩转python主题模型程序库gensim
gensim是python下一个极易上手的主题模型程序库(topic model),网址在:http://radimrehurek.com/gensim/index.html 安装过程较为繁琐,参考h ...
- Struts2笔记04——Hello World Example(转)
原文地址:https://www.tutorialspoint.com/struts_2/ [注释]项目结构,次序估计有误 通过学习Struts2的架构,我们可以知道,在Struts2 web应用中, ...
- DNS 递归/迭代 原理
递归查询 递归:客户端只发一次请求,要求对方给出最终结果.一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结 ...
- linux下安装jsp开发运行环境(centos7)
1 开发环境包括 1)apache-tomcat 2)java-jdk 3)mysql 2 apache-tomcat安装(应该先装java再装tomcat) 1)到官网下载最新版本(不建议用yum安 ...
- S005SELinux(SEAndroid)的实际文件组成无标题文章
SEAndroid 是将SELinux 移植到Android 上的产物,可以看成SELinux 辅以一套适用于Android 的策略. 那么在android系统中那些文件是与SELinux(SEAnd ...
- 基于Visual c++ 2012的php扩展开发 - HelloWord!
1.cmd进入命令行模式,并进入php-5.6.20-src/ext源代码的ext目录下输入命令php ext_skel_win32.php --extname=HelloWord,执行结果如下图: ...
- Python 数值类型
1.数值类型分为整形(二进制(0b),八进制(0o),十进制,十六进制(0x) ),浮点型,long,complex(复合行) 当我们说十进制数的时候,是逢10进1,就是说到达10的时候就要向前一位进 ...
- poj2442优先队列
感谢 http://hi.baidu.com/%C0%B6%C9%ABarch/blog/item/f9d343f49cd92e53d7887d73.html 的博主! 思路: 我们要找到n个smal ...
- 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” 提供程序
我在Web App程序里面用“Microsoft.Jet.OLEDB.4.0”来连接Excel文件,导入到数据库,在Windows 2003+ Office 2007 的环境下正常,但是在Window ...