1. Dubbo简介
Dubbo是阿里巴巴公司开源的一个高性能的分布式服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。
RPC(Remote Procedure Call)——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
参考文档:
- Dubbo官网
- Dubbo官方文档
- 基于Dubbo框架构建分布式服务
- Dubbo架构设计详解
- Dubbo入门—搭建一个最简单的Demo框架
- Dubbo源码学习(一)之dubbo-demo
- pom.xml 缺少commons-pool依赖,导致编译失败
- 基于Dubbo的Hessian协议实现远程调用
- Dubbo实现RPC调用使用入门
- 基于dubbo框架下的RPC通讯协议性能测试
2. 服务调用流程
1、服务容器负责启动,加载,运行服务提供者。
2、服务提供者在启动时,向注册中心注册自己提供的服务。
3、服务消费者在启动时,向注册中心订阅自己所需的服务。
4、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
3. Dubbo注册中心
Dubbo提供的注册中心有如下几种类型可供选择:
- Multicast注册中心
- Zookeeper注册中心
- Redis注册中心
- Simple注册中心
本文中,我们选择使用Zookeeper作为注册中心,Zookeeper安装配置方法参考文档《Zookeeper入门篇》。
4. dubbo-admin
dubbo的使用,其实只需要有注册中心、提供者、消费者这三个就可以使用了,但是并不能看到有哪些消费者和提供者,为了更好的调试,发现问题,解决问题,因此引入dubbo-admin。通过dubbo-admin可以对消费者和提供者进行管理。
1、源码下载
1 | git clone https://github.com/alibaba/dubbo.git |
这份源码,不止包含dubbo-admin,还有很多其他代码,比如dubbo-demo、dubbo-config等。
2、编译dubbo-admin
进入dubbo-admin目录,打开命令行,执行:
1 | 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、用户名密码
页面提示输入用户名密码,默认用户名密码都是root。
用户名密码配置路径:tomcat/webapps/dubbo-admin/WEB-INF/dubbo.properties
5. dubbo-demo
在上面下载的源码中,包含dubbo-demo。
1、打开dubbo文件夹,构建源码,生成IDEA支持的项目文件
1 | mvn clean install -Dmaven.test.skip |
编译时,报错:
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 | <!-- 使用multicast广播注册中心暴露服务地址 --> |
7、重新运行Provider.java,即可看到提供者。
重新运行Consumer.java,却看不到消费者,这是因为消费者消费后把socket关闭了。修改Consumer.java,添加System.in.read();
并且抛出异常,重新运行即可在dubbo-admin中看到消费者。
6. 小结
至此,dubbo的最简单demo运行成功。
dubbo支持多种协议,通过协议,可以实现不同语言间的相互调用。接下来,需要研究python调用dubbo服务。待续。。。