Dubbo 官网:http://dubbo.apache.org/zh-cn/index.html,Dubbo 官网描述非常详尽,详细内容可以参考官网文档,这里只做初步认识。

Dubbo 的架构

Dubbo 初步认识 - 图1

节点角色说明

节点 角色说明
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 集群来实现,也可以不使用注册中心,下面的会介绍)。

简单的调用链路参考如下:

image.png

项目结构如下图所示:

image.png

image.png

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 配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9. <!--提供方信息-->
  10. <dubbo:application name="dubbo-server" owner="yjw"/>
  11. <!--注册中心-->
  12. <!-- 表示不配置注册中心
  13. <dubbo:registry address="N/A"/> -->
  14. <!-- 配置Zookeeper注册中心 -->
  15. <!-- <dubbo:registry address="zookeeper://192.168.202.18:2181?backup=192.168.202.49:2181,192.168.202.50:2181"/>-->
  16. <dubbo:registry protocol="zookeeper"
  17. address="192.168.202.18:2181,192.168.202.49:2181,192.168.202.50:2181"/>
  18. <!-- 配置协议 -->
  19. <dubbo:protocol name="dubbo" port="20880"/>
  20. <dubbo:protocol name="hessian" port="8080"/>
  21. <!-- 配置服务接口 -->
  22. <dubbo:service interface="com.yjw.dubbo.IHelloService"
  23. ref="helloService"
  24. protocol="dubbo,hessian"/>
  25. <bean id="helloService" class="com.yjw.dubbo.HelloServiceImpl"/>
  26. </beans>

dubbo-client.xml 配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  4. xmlns="http://www.springframework.org/schema/beans"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9. <!--调用方信息-->
  10. <dubbo:application name="dubbo-client" owner="yjw"/>
  11. <!-- 注册中心:表示不配置注册中心
  12. <dubbo:registry address="N/A"/> -->
  13. <!-- 配置调用接口
  14. <dubbo:reference id="helloService" interface="com.yjw.dubbo.IHelloService"
  15. url="dubbo://192.168.202.62:20880/com.yjw.dubbo.IHelloService"/> -->
  16. <!-- 注册中心:配置Zookeeper注册中心 -->
  17. <!-- <dubbo:registry address="zookeeper://192.168.202.18:2181?backup=192.168.202.49:2181,192.168.202.50:2181"/>-->
  18. <!-- file是缓存地址,用户缓存服务端调用地址信息 -->
  19. <dubbo:registry protocol="zookeeper"
  20. address="192.168.202.18:2181,192.168.202.49:2181,192.168.202.50:2181"
  21. file="d:/dubbo-server"/>
  22. <!-- 配置调用接口 -->
  23. <!-- <dubbo:reference id="helloService" interface="com.yjw.dubbo.IHelloService" protocol="dubbo"/> -->
  24. <dubbo:reference id="helloService"
  25. interface="com.yjw.dubbo.IHelloService"
  26. protocol="hessian"
  27. check="false"/>
  28. </beans>

注册中心 address 配置 “N/A”,表示不配置注册中心,客户端配置 dubbo:reference 需要增加 url 参数。

Dubbo 支持的注册中心:Zookeeper、Redis、Multicast、Simple。

Dubbo 的 Zookeeper 注册中心单机、集群配置

Zookeeper 单机配置

方式一:

  1. <dubbo:registry address="zookeeper://192.168.202.18:2181"/>

方式二:

  1. <dubbo:registry protocol="zookeeper" address="192.168.202.18:2181"/>

Zookeeper 集群配置

方式一:

  1. <dubbo:registry address="zookeeper://192.168.202.18:2181?backup=192.168.202.49:2181,192.168.202.50:2181"/>

方式二:

  1. <dubbo:registry protocol="zookeeper"
  2. 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 容器快速启动服务,代码如下:

  1. /**
  2. * 容器启动
  3. *
  4. * @param args
  5. */
  6. public static void containerStart(String[] args) {
  7. Main.main(args);
  8. }

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