Dubbo入门

文章目录
  1. 1. Dubbo简介
  2. 2. 服务调用流程
  3. 3. Zookeeper
    1. 3.1. 下载安装
    2. 3.2. 配置
    3. 3.3. 启动
  4. 4. dubbo-admin
  5. 5. dubbo-demo
  6. 6. 小结
  7. 7. 书签

Dubbo简介

Dubbo是阿里巴巴公司开源的一个高性能的分布式服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。

RPC(Remote Procedure Call)——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

服务调用流程

1、服务容器负责启动,加载,运行服务提供者。
2、服务提供者在启动时,向注册中心注册自己提供的服务。
3、服务消费者在启动时,向注册中心订阅自己所需的服务。
4、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

Zookeeper

Dubbo提供的注册中心有如下几种类型可供选择:

  • Multicast注册中心
  • Zookeeper注册中心
  • Redis注册中心
  • Simple注册中心

接下来,我们安装一个Zookeeper,用来管理服务。

下载安装

1、访问zookeeper官网,下载一个喜欢的zookeeper版本,这里小编下载的是zookeeper-3.4.10.tar.gz。

2、解压zookeeper-3.4.10.tar.gz到D:\Server目录。

配置

1、zookeeper 的配置文件在 conf 目录下,有 zoo_sample.cfg 和 log4j.properties。

2、将zoo_sample.cfg复制一份,重命名成zoo.cfg,因为zookeeper在启动时会找这个文件作为默认配置文件。
下面介绍zoo.cfg文件里面几个配置的意义:

  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
  • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
  • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

3、在zookeeper的根目录下,新建文件夹data。然后修改配置文件dataDir为:

1
dataDir=D:\\Server\\zookeeper-3.4.10\\data

启动

1、zookeeper-3.4.10/bin下存在zkServer.cmd,双击它,即可启动zookeeper。

2、打开命令行,输入jsp,如果看到如下提示,说明启动成功。

1
2
3
4
10336 RemoteMavenServer
13488 Jps
12268 QuorumPeerMain
13052

3、启动之后一直开着,不要关掉这个cmd,记得要在Dubbo消费者和提供者运行之前就开启Zookeeper。

dubbo-admin

dubbo的使用,其实只需要有注册中心、提供者、消费者这三个就可以使用了,但是并不能看到有哪些消费者和提供者,为了更好的调试,发现问题,解决问题,因此引入dubbo-admin。通过dubbo-admin可以对消费者和提供者进行管理。

1、源码下载
git clone https://github.com/alibaba/dubbo.git

这份源码,不止包含dubbo-admin,还有很多其他代码,比如dubbo-demo、dubbo-config等。

2、编译dubbo-admin
进入dubbo-admin目录,打开命令行,执行:
mvn package -Dmaven.skip.test=true
即可在当前目录下生成target文件夹,文件夹中的war包就是我们需要的文件。

3、部署dubbo-admin
把war包放到tomcat的webapps目录下,重命名为dubbo-admin.war。

4、启动tomcat
进入tomcat的bin目录,然后双击startup.bat。

5、测试访问
tomcat会自动解压war包,这时访问 http://localhost:8080/dubbo-admin ,即可看到部署后的效果。

6、用户名密码
页面提示输入用户名密码,我们到tomcat/webapps/dubbo-admin/WEB-INF/dubbo.properties中查看,默认用户名密码都是root。

dubbo-demo

在上面下载的源码中,包含dubbo-demo。

1、打开dubbo文件夹,构建源码,生成IDEA支持的项目文件

1
2
mvn clean install -Dmaven.test.skip
mvn idea:idea

编译时,报错:

1
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project dubbo-demo-provider: Compilation failure -> [Help 1]

改maven配置,失败。更换maven版本,失败。怒删C:\Users\voidking\.m2\repository中的所有文件,成功。

2、IDEA打开生成的dubbo-parent.ipr文件,就可以看到整个dubbo的工程了。

3、运行Provider.java

报错Error:Maven Resources Compiler: Maven project configuration required for module 'hessian-lite' isn't available. Compilation of Maven projects is supported only if external build is started from an IDE.

打开窗口右侧Maven Project,点击加号选择dubbo根目录下的pom.xml,再次运行Provider.java。

如果没有报错,则说明Provider.java运行成功,它会保持在运行状态。

4、运行Consumer.java
运行成功的话,可以看到Consumer控制台打印出 Hello world, response form provider: 169.254.36.242:20880,同时,Provider控制台打印出Hello world, request from consumer: /169.254.36.242:54924

5、打开dubbo-admin,却看不到提供者。这是因为我们在运行Provider的时候,并没有指定Zookeeper作为注册中心。

6、修改dubbo-demo-provider.xml和dubbo-demo-consumer.xml中的registry。

1
2
3
<!-- 使用multicast广播注册中心暴露服务地址 -->
<!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
<dubbo:registry address="zookeeper://localhost:2181"/>

7、重新运行Provider.java,即可看到提供者。
重新运行Consumer.java,却看不到消费者,这是因为消费者消费后把socket关闭了。修改Consumer.java,添加System.in.read();并且抛出异常,重新运行即可在dubbo-admin中看到消费者。

小结

至此,dubbo的最简单demo运行成功。
dubbo支持多种协议,通过协议,可以实现不同语言间的相互调用。接下来,需要研究python调用dubbo服务。待续。。。

书签

Dubbo官网

Dubbo官方文档

基于Dubbo框架构建分布式服务

Dubbo架构设计详解

Dubbo入门—搭建一个最简单的Demo框架

Dubbo源码学习(一)之dubbo-demo

pom.xml 缺少commons-pool依赖,导致编译失败


基于Dubbo的Hessian协议实现远程调用

Dubbo实现RPC调用使用入门

基于dubbo框架下的RPC通讯协议性能测试