1.1 DUBBO简介
Dubbo是Alibaba开源的分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。
节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
2 DUBBO入门
2.1 环境搭建
2.1.1 搭建java开发环境(略)
2.1.2 搭建Zookeeper环境
Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。
■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境;
■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例;
■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble)
这里主要介绍单机模式安装。
(1) 下载并解压zookeeper;
(2) 重命名zoo_sample.cfg文件,文件名为zoo.cfg;
(3) 修改zoo.cfg配置文件,主要修改zookeeper端口;
(4) 通过bin目录下的zkServer.cmd启动zookeeper。
2.1.3 dubbo控制台安装
dubbo管理控制台开源部分主要包含: 提供者、路由规则、动态配置、访问控制、权重调节、负载均衡、负责人等管理功能。
(1) 下载dubbo-admin管理项目war包;
(2) 先删除tomcat/webapps下自带的ROOT文件夹内容(替换tomcat的启动主页),将下载的war包解压到webapps/ROOT;
(3) 修改dubbo.properties文件;
(4) 启动tomcat,登陆主页。
2.2 暴露接口开发
新建一个project,开发暴露服务的接口。
将接口文件打包为jar,方便服务提供者和服务消费者引用。
2.3 提供者开发
(1) 新建一个project,开发服务提供者
(2) 导入jar包
Dubbo可以和spring无缝对接。首先导入spring框架jar。
还需导入以下jar:
导入服务接口jar
(3) 实现服务接口
(4) 配置注册服务文件
spring-dubbo.xml
applicationContext.xml文件引入spring-dubbo.xml文件
(5) 写一个测试类启动容器,注册服务到注册中心
2.4 消费者开发
(1) 新建一个project,开发服务消费者
(2) 引入相关jar包,与上述提供者一致
(3) 服务引用配置
spring-dubbo文件
applicationContext.xml文件引入spring-dubbo.xml文件
(4)写一个测试类启动容器,引用服务
启动之后,调用服务成功,provider控制台输出
2.5 DUBBO常用配置讲解
1、<dubbo:application/> 应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
一般配置一个name属性即可,相当于给该应用取名。
eg : <dubbo:application name=”my_provider”/>
2、<dubbo:registry/> 注册中心配置,用于配置连接注册中心相关信息。常用属性 address,指注册中心及ip。
eg :<dubbo:registry address="zookeeper://127.0.0.1:2181" />
属性中:zookeeper指使用的是Zookeeper注册中心,后面跟上注册中心ip地址。
3、<dubbo:protocol/> 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。Dubbo协议端口缺省值为20880。
eg、<dubbo:protocol name="dubbo" port="20880" />
4、<dubbo:service/> 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。
eg :<dubbo:service ref="providerBean" interface="com.zwen.provider.ProviderService"/>
其中:ref属性指服务处理实现类bean 的id,interface指服务接口
5、<dubbo:reference/> 引用服务配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。
eg、<dubbo:reference id="provider" interface=" com.zwen.provider.ProviderService " check=" false" />
其中:id属性指dubbo生成的服务代理bean的id,在可以当做本地bean使用;interface指服务接口;check属性指在启动时检查服务依赖是否可用,不可用则抛出异常,阻止spring初始化,如果先启动消费者或者不确定,需设置check="false";