Dubbo
简介
Apache Dubbo是一款高性能的
Java RPC
框架。其前身是阿里巴巴公司开源的、轻量级的开源
Java RPC 框架,可以和Spring
框架无缝集成,
2018
年阿里巴巴把这个框架捐献给了
apache
基金会。
什么是
RPC
?
RPC全称为
remote procedure call
,即
远程过程调用
。比如两台服务器
A
和
B
,
A
服务器上部署一个应 用,B
服务器上部署一个应用,
A
服务器上的应用想调用
B
服务器上的应用提供的方法,由于两个应用不 在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。
需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。
RPC
是一个泛化的概念,严格来说一切远程过程调用手段都属于
RPC
范畴。各种开发语言都有自己的 RPC框架。
Java
中的
RPC
框架比较多,广泛使用的有
RMI
、
Hessian
、
Dubbo
等。
Dubbo官网地址:
http://dubbo.apache.org
Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发 现。
Dubbo
架构
虚线都是异步访问,实线都是同步访问 蓝色虚线:
在启动时完成的功能 红色虚线
(
实线
)
都是程序运行过 程中执行的功能
调用关系说明
:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给 消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失 败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
服务注册中心
Zookeeper
通过前面的Dubbo
架构图可以看到,
Registry
(服务注册中心)在其中起着至关重要的作用。
Dubbo
官 方推荐使用Zookeeper
作为服务注册中心。
Zookeeper
介绍
流程说明:
服务提供者(Provider)
启动时
:
向
/dubbo/com.foo.BarService/providers
目录下写入自己的
URL
地址
服务消费者(Consumer)
启动时
:
订阅
/dubbo/com.foo.BarService/providers
目录下的提供者
URL
地址。并向
/dubbo/com.foo.BarService/consumers
目录下写入自己的
URL
地址
监控中心(Monitor)
启动时
:
订阅
/dubbo/com.foo.BarService
目录下的所有提供者和消费者
URL
地址
安装
Zookeeper
下载地址:
http://archive.apache.org/dist/zookeeper/
下载完成后可以获得名称为zookeeper-3.4.6.tar.gz
的压缩文 件。
安装步骤:第一步:安装
jdk
(略) 第二步:把
zookeeper
的压缩包(
zookeeper-3.4.6.tar.gz
)上传到
linux
系 统 第三步:解压缩压缩包 tar -zxvf zookeeper-3.4.6.tar.gz -C /usr
第四步:进入
zookeeper-3.4.6
目 录,创建data
目录
mkdir data
第五步:进入conf
目录 ,把
zoo_sample.cfg
改名为
zoo.cfg cd conf mv zoo_sample.cfg zoo.cfg
第六步:打开zoo.cfg
文件
,
修改
data
属性:
dataDir=/usr/zookeeper- 3.4.6/data
3.3
启动、停止
Zookeeper
进入
Zookeeper
的
bin
目录,启动服务命令
./zkServer.sh start
停止服务命令
./zkServer.sh stop
查看服务状态:
./zkServer.sh status
客户端连接
./zkCli.sh
Dubbo
快速入门
Dubbo作为一个
RPC
框架,其最核心的功能就是要实现跨网络的远程调用。本小节就是要创建两个应 用,一个作为服务的提供方,一个作为服务的消费方。通过Dubbo
来实现服务消费方远程调用服务提供
方的方法。
4.
服务提供方开发
开发步骤:
(
1
)创建
maven
工程(打包方式为
war
)
dubbodemo_provider
,在
pom.xml
文件中导入如下坐标
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<maven.compiler.source>
1.8
</maven.compiler.source>
<maven.compiler.target>
1.8
</maven.compiler.target>
<spring.version>
5.0.5.RELEASE
</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-context
</artifactId>
<version>
${spring.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-beans
</artifactId>
<version>
${spring.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-webmvc
</artifactId>
<version>
${spring.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-jdbc
</artifactId>
<version>
${spring.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-aspects
</artifactId>
<version>
${spring.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-jms
</artifactId>
<version>
${spring.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-context-support
</artifactId>
<version>
${spring.version}
</version>
</dependency>
<!-- dubbo
相关
-->
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
dubbo
</artifactId>
<version>
2.6.0
</