配套资料,免费下载
链接:https://pan.baidu.com/s/1jA217UgqXpONi_fV-aOzqw
提取码:bm2g
复制这段内容后打开百度网盘手机App,操作更方便哦
1、Dubbo的概述
1.1、Dubbo概述
RPC
RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。需要注意的是,RPC并不是一个具体的技术,而是指整个网络远程调用过程。RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于RPC范畴。各种开发语言都有自己的RPC框架, Java 中的RPC框架比较多,广泛使用的有RMI、Hessian、Dubbo等。
Dubbo
Dubbo 是一款高性能、轻量级的开源 Java 服务框架,Dubbo |ˈdʌbəʊ| 提供了六大核心能力:面向接口代理的高性能RPC调用,智能负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。
1.2、Dubbo流程
运行架构:
节点说明:
节点 | 角色名称 |
---|---|
Provider | 暴露服务的服务提供方 |
Consumer | 调用服务的服务消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行容器,一般就是Spring的IOC容器 |
关系说明:
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
2、Dubbo的注册中心
2.1、Zookeeper概述
Dubbo 官方推荐使用 Zookeeper 作为服务注册中心(Registry)。Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境并推荐使用 。
2.2、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 地址。
2.3、Zookeeper下载
打开下载网址:http://archive.apache.org/dist/zookeeper/
注意:下载完成以后,直接解压到一个不含有中文和空格路径即代表安装完成。
2.4、Zookeeper配置
第一步:创建data
数据目录
第二步:拷贝conf
配置文件
第三步:配置data
数据目录
2.5、Zookeeper启动
3、Dubbo的快速入门
3.1、服务生产者
3.1.1、工程搭建
注意:请您手动将包名
com.caochenlei.dubboproducer
修改为com.caochenlei
。
3.1.2、导入依赖
pom.xml
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.1.0</version>
</dependency>
3.1.3、编写配置
application.yaml
server:
port: 9001
servlet:
application-display-name: dubbo-producer
dubbo:
#应用配置
application:
name: dubbo-producer
version: 0.0.1-SNAPSHOT
logger: slf4j
#注册中心
registry:
protocol: zookeeper
address: zookeeper://127.0.0.1:2181
check: false
#协议配置
protocol:
name: dubbo
port: 20880
#注解扫描
scan:
base-packages: com.caochenlei.service.impl
3.1.4、编写接口
com.caochenlei.service.HelloService
public interface HelloService {
String sayHello(String msg);
}
3.1.5、编写服务
com.caochenlei.service.impl.HelloServiceImpl
@DubboService
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String msg) {
return msg;
}
}
3.1.6、启动工程
请您手动找到启动类,然后启动该工程,只有正常启动以后,您才可以进入下一环节。
3.2、服务消费者
3.2.1、工程搭建
注意:请您手动将包名
com.caochenlei.dubboconsumer
修改为com.caochenlei
。
3.2.2、导入依赖
pom.xml
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.1.0</version>
</dependency>
3.2.3、编写配置
application.yaml
server:
port: 9002
servlet:
application-display-name: dubbo-consumer
dubbo:
#应用配置
application:
name: dubbo-consumer
version: 0.0.1-SNAPSHOT
logger: slf4j
#注册中心
registry:
protocol: zookeeper
address: zookeeper://127.0.0.1:2181
check: false
#注解扫描
scan:
base-packages: com.caochenlei.controller
3.2.4、编写接口
com.caochenlei.service.HelloService
public interface HelloService {
String sayHello(String msg);
}
3.2.5、编写控制器
com.caochenlei.controller.HelloController
@RestController
public class HelloController {
@DubboReference
private HelloService helloService;
@RequestMapping("/sayHello")
public String sayHello(String msg) {
return helloService.sayHello(msg);
}
}
3.2.6、启动工程
请您手动找到启动类,然后启动该工程,只有正常启动以后,您才可以进入下一环节。
3.2.7、测试效果
打开浏览器输入地址:http://localhost:9002/sayHello?msg=zhangsan ,如果一切正常,那么您将看到以下的界面,代表成功了。
4、Dubbo的监控中心
4.1、监控中心介绍
我们在开发时,需要知道 Zookeeper 注册中心都注册了哪些服务,有哪些消费者来消费这些服务,我们可以通过部署一个监控中心来实现管理。
4.2、监控中心启动
找到配套资料中的监控中心dubbo-admin-0.1.jar
,使用java -jar dubbo-admin-0.1.jar
直接启动,在浏览器输入地址:http://localhost:8080/