一、Dubbo简介
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
其核心部分包含:
远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
二、系统结构
Dubbo系统分为五个部分:远程服务运行容器(Container),远程服务提供方(Provider)、注册中心(Register)、远程服务调用者(Consumer)、监控中心(Monitor)。
Dubbo服务调用过程:
服务提供方(Provider)所在的应用在容器中启动并运行(这个容器可以说是该应用部署的tomcat)。
服务提供方(Provider)将自己要发布的服务注册到注册中心(Registry)。
服务调用方(Consumer)启动后向注册中心订阅它想要调用的服务。
注册中心(registry)存储着Provider注册的远程服务,并将其所管理的服务列表通知给服务调用方(Consumer),且注册中心和提供方和调用方之间均保持长连接,
可以获取Provider发布的服务的变化情况,并将最新的服务列表推送给Consumer。
Consumer根据从注册中心获得的服务列表,根据软负载均衡算法选择一个服务提供者(Provider)进行远程服务调用,如果调用失败则选择另一台进行调用。
(Consumer会缓存服务列表,即使注册中心宕机也不妨碍进行远程服务调用)。
监控中心(Monitor)对服务的发布和订阅进行监控和统计服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心(Monitor);
Monitor可以选择Zookeeper、Redis或者Multiast注册中心等。
三、dubbo与zookeeper关系
Dubbo可以用Zookeeper作为注册中心,存储注册中心Provider注册的远程服务信息。
服务提供方通过dubbo建立service这个服务,并且到zookeeper上面注册,填写对应的zookeeper服务所在的IP及端口号。
服务调用者需要来调用service接口,由于在不同的工程中,它是无法直接找到service接口的,我们使用dubbo再来引用注册进入的dubbo服务。
先填写zookeeper服务所在的IP及端口号,再填写我们需要调用的接口名字。这样,就能实现调用。
Dubbo不仅可选Zookeeper作为注册中心,还有其他几种类型。Dubbo提供的注册中心有:Zookeeper注册中心,Redis注册中心,Multicast注册中心,Simple注册中心
四、相关jar包
<!-- dubbo begin -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.3</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<!-- 排除spring-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- dubbo end -->