http://www.cnblogs.com/umgsai/p/5836925.html
一、什么是dubbo?
dubbo是一个分布式服务框架,用于提高性能和透明化的rpc远程服务调用方案,以及soa服务治理方案。
核心:
1、远程通讯:
提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求”
只要简单配置,就能像调用本地方法一样调用远程方法。
2、集群容错:
失败容错,软负载均衡
3、自动发现:
服务自动注册与发现,基于注册中心目录服务,使服务提供方可以平滑增加或减少机器
二、架构图:

Provider: 服务提供方
Consumer:服务消费方
Registry:注册中心
Monitor:监控中心,统计服务调用次数和时间
Container:服务运行容器
1、服务容器启动、加载、运行服务提供者
2、服务提供者向注册中心注册
3、服务消费者启动,订阅所需服务
4、注册中心返回服务提供者列表给消费者,如果有变更,注册中心
将基于长连接推送变更数据给消费者
5、服务消费者基于软负载均衡算法,从提供者列表中选一台提供者进行调用,
如果失败,再选另外一台调用
6、服务提供者跟消费者,在内存中累计调用次数和时间,定时发送统计数给监控中心
三、Dubbo服务的运行方式
1.使用Servlet容易运行(Tomcat Jetty等) 不可取
缺点:增加复杂性(端口、管理) 浪费资源(内存)
2.自建Main方法类来运行(Spring容器) 不建议(本地调试可用)
缺点:Dubbo本身提供的高级特性没用上,自己编写的启动类可能有缺陷
3.使用Dubbo框架提供的Main方法类来运行(Spring容器) 建议使用
优点:框架本身提供(com.alibaba.dubbo.container.Main) 可实现优雅关机(ShutdownHook)
注意点:spring-context.xml <import resource="classpath:spring/spring-xxx.xml"/>
四、Dubbo主要配置
1、提供方 provider.xml
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="demo-provider" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry protocol="zookeeper" address="172.24.51.28:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 用户服务接口 -->
<dubbo:service interface="com.demo.service.UserService" ref="userService" />
2、消费方 consumer.xml
<!--消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="demo-consumer"/>
<!--zookeeper注册中心 -->
<dubbo:registry protocol="zookeeper" address="172.24.51.28:2181" />
<!--使用multicast广播注册中心暴露的服务地址 -->
<!--<dubbo:registryaddress="multicast://10.57.41.19:1234" /> -->
<!-- 生成远程服务代理,可以和本地bean一样使用demoService,
默认check="true",如果为false,则可以先启动消费方不报错
-->
<dubbo:reference id="userService" interface="com.demo.service.UserService" />
五、Dubbo管理控制台
Dubbo管控台可以对注册到zookeeper注册中心的服务或服务消费者进行管理
一、什么是dubbo?
dubbo是一个分布式服务框架,用于提高性能和透明化的rpc远程服务调用方案,以及soa服务治理方案。
核心:
1、远程通讯:
提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求”
只要简单配置,就能像调用本地方法一样调用远程方法。
2、集群容错:
失败容错,软负载均衡
3、自动发现:
服务自动注册与发现,基于注册中心目录服务,使服务提供方可以平滑增加或减少机器
二、架构图:

Provider: 服务提供方
Consumer:服务消费方
Registry:注册中心
Monitor:监控中心,统计服务调用次数和时间
Container:服务运行容器
1、服务容器启动、加载、运行服务提供者
2、服务提供者向注册中心注册
3、服务消费者启动,订阅所需服务
4、注册中心返回服务提供者列表给消费者,如果有变更,注册中心
将基于长连接推送变更数据给消费者
5、服务消费者基于软负载均衡算法,从提供者列表中选一台提供者进行调用,
如果失败,再选另外一台调用
6、服务提供者跟消费者,在内存中累计调用次数和时间,定时发送统计数给监控中心
三、Dubbo服务的运行方式
1.使用Servlet容易运行(Tomcat Jetty等) 不可取
缺点:增加复杂性(端口、管理) 浪费资源(内存)
2.自建Main方法类来运行(Spring容器) 不建议(本地调试可用)
缺点:Dubbo本身提供的高级特性没用上,自己编写的启动类可能有缺陷
3.使用Dubbo框架提供的Main方法类来运行(Spring容器) 建议使用
优点:框架本身提供(com.alibaba.dubbo.container.Main) 可实现优雅关机(ShutdownHook)
注意点:spring-context.xml <import resource="classpath:spring/spring-xxx.xml"/>
四、Dubbo主要配置
1、提供方 provider.xml
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="demo-provider" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry protocol="zookeeper" address="172.24.51.28:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 用户服务接口 -->
<dubbo:service interface="com.demo.service.UserService" ref="userService" />
2、消费方 consumer.xml
<!--消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="demo-consumer"/>
<!--zookeeper注册中心 -->
<dubbo:registry protocol="zookeeper" address="172.24.51.28:2181" />
<!--使用multicast广播注册中心暴露的服务地址 -->
<!--<dubbo:registryaddress="multicast://10.57.41.19:1234" /> -->
<!-- 生成远程服务代理,可以和本地bean一样使用demoService,
默认check="true",如果为false,则可以先启动消费方不报错
-->
<dubbo:reference id="userService" interface="com.demo.service.UserService" />
五、Dubbo管理控制台
Dubbo管控台可以对注册到zookeeper注册中心的服务或服务消费者进行管理
一般把包放置/webapps目录下
六、Dubbo协议
Dubbo允许配置多协议,不同服务支持不同协议或者同一服务同时支持多种协议
比如大数据用短连接协议,小数据大并发用长连接协议
1、Dubbo
Dubbo缺省使用dubbo协议,单一长连接和NIO异步通讯,适用于小数据大并发,消费
服务机器数量远大于提供者情况,不合适大数据量,比如传文件,视频等
2、RMI
短连接,jdk序列化,适用:传入传出参数数据包大小混合,消费者与提供者个数差不多。可传文件
3、Hessian
底层http通讯,适用:传入传出参数数据包较大,提供者大于消费者,可传文件
4、其他
http、webservice、thrift、mencached、redis