Dubbo 官网:http://dubbo.apache.org/zh-cn/index.html,Dubbo 官网描述非常详尽,详细内容可以参考官网文档,这里只做初步认识。
Dubbo 的架构
节点角色说明
节点 | 角色说明 |
---|---|
Provider | 暴露服务的服务提供方 |
Consumer | 调用远程服务的服务消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行容器 |
具体内容参考官网文章:http://dubbo.apache.org/zh-cn/docs/user/preface/architecture.html
Dubbo 的使用
我们创建两个项目:dubbo-client、dubbo-server,通过这两个项目来演示 Dubbo 的使用,来达到初步认识 Dubbo 的目的。演示 Dubbo 项目有个前提是我们已经把 Zookeeper 集群搭建好,Dubbo 的注册中心配置会依赖 Zookeeper 集群(当然,Dubbo 的注册中心不一定非得依赖 Zookeeper 集群来实现,也可以不使用注册中心,下面的会介绍)。
简单的调用链路参考如下:
项目结构如下图所示:
dubbo-server 有两个子模块,server-api 和 server-provider,server-api 存放接口,server-provider 存放接口的实现类,server-provider 依赖 server-api,dubbo-client 依赖 server-api。
我们在 dubbo-client 中要调用 dubbo-server 的 HelloServiceImpl.sayHello 方法,就需要通过引入 Dubbo 来实现了,这里我们使用的 Dubbo 的版本是 2.5.8,还是一个比较老的版本。
Git 地址:https://gitee.com/yin_jw/demo/tree/master/dubbo-demo
Dubbo 配置文件
dubbo-server.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--提供方信息-->
<dubbo:application name="dubbo-server" owner="yjw"/>
<!--注册中心-->
<!-- 表示不配置注册中心
<dubbo:registry address="N/A"/> -->
<!-- 配置Zookeeper注册中心 -->
<!-- <dubbo:registry address="zookeeper://192.168.202.18:2181?backup=192.168.202.49:2181,192.168.202.50:2181"/>-->
<dubbo:registry protocol="zookeeper"
address="192.168.202.18:2181,192.168.202.49:2181,192.168.202.50:2181"/>
<!-- 配置协议 -->
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:protocol name="hessian" port="8080"/>
<!-- 配置服务接口 -->
<dubbo:service interface="com.yjw.dubbo.IHelloService"
ref="helloService"
protocol="dubbo,hessian"/>
<bean id="helloService" class="com.yjw.dubbo.HelloServiceImpl"/>
</beans>
dubbo-client.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--调用方信息-->
<dubbo:application name="dubbo-client" owner="yjw"/>
<!-- 注册中心:表示不配置注册中心
<dubbo:registry address="N/A"/> -->
<!-- 配置调用接口
<dubbo:reference id="helloService" interface="com.yjw.dubbo.IHelloService"
url="dubbo://192.168.202.62:20880/com.yjw.dubbo.IHelloService"/> -->
<!-- 注册中心:配置Zookeeper注册中心 -->
<!-- <dubbo:registry address="zookeeper://192.168.202.18:2181?backup=192.168.202.49:2181,192.168.202.50:2181"/>-->
<!-- file是缓存地址,用户缓存服务端调用地址信息 -->
<dubbo:registry protocol="zookeeper"
address="192.168.202.18:2181,192.168.202.49:2181,192.168.202.50:2181"
file="d:/dubbo-server"/>
<!-- 配置调用接口 -->
<!-- <dubbo:reference id="helloService" interface="com.yjw.dubbo.IHelloService" protocol="dubbo"/> -->
<dubbo:reference id="helloService"
interface="com.yjw.dubbo.IHelloService"
protocol="hessian"
check="false"/>
</beans>
注册中心 address 配置 “N/A”,表示不配置注册中心,客户端配置 dubbo:reference 需要增加 url 参数。
Dubbo 支持的注册中心:Zookeeper、Redis、Multicast、Simple。
Dubbo 的 Zookeeper 注册中心单机、集群配置
Zookeeper 单机配置
方式一:
<dubbo:registry address="zookeeper://192.168.202.18:2181"/>
方式二:
<dubbo:registry protocol="zookeeper" address="192.168.202.18:2181"/>
Zookeeper 集群配置
方式一:
<dubbo:registry address="zookeeper://192.168.202.18:2181?backup=192.168.202.49:2181,192.168.202.50:2181"/>
方式二:
<dubbo:registry protocol="zookeeper"
address="192.168.202.18:2181,192.168.202.49:2181,192.168.202.50:2181"/>
Dubbo 服务容器
Dubbo 官方文档:http://dubbo.apache.org/zh-cn/docs/user/demos/service-container.html
通过 Dubbo 容器快速启动服务,代码如下:
/**
* 容器启动
*
* @param args
*/
public static void containerStart(String[] args) {
Main.main(args);
}
Dubbo 多协议支持
Dubbo 支持的协议:RMI、Hessian、WebService、HTTP、Thrift、Dubbo(默认),多协议支持有什么好处呢?比如我们要改造老项目,引入 Dubbo 框架,这个时候可以对服务配置多协议支持,兼容项目的过渡版本。
Dubbo 官方文档:http://dubbo.apache.org/zh-cn/docs/user/demos/multi-protocols.html
Dubbo 多注册中心支持
Dubbo 官方文档:http://dubbo.apache.org/zh-cn/docs/user/demos/multi-registry.html
Dubbo 启动时检查
Dubbo 官方文档:http://dubbo.apache.org/zh-cn/docs/user/demos/preflight-check.html
Dubbo 多版本支持
Dubbo 官方文档:http://dubbo.apache.org/zh-cn/docs/user/demos/multi-versions.html