数据接口

概述

  1. 概念:Apache Dubbo是一款高性能、轻量级的开源服务框架,提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。
  2. 其他RPC框架:gRPC,Thrift,HSF

基本架构

在这里插入图片描述

Dubbo支持的协议

Dubbo支持多种协议,Dubbo,hessian,rmi,http,webservice,thrift,memcached,redis.Dubbo官方推荐使用Dubbo协议,Dubbo协议默认端口为20880

1.使用Dubbo协议
<!-- spring配置文件中加入如下内容-->
<dubbo:protocol name="dubbo" port="20880"/>

点对点的直连方式:消费者直接访问服务提供者,不使用注册中心

1.服务的提供者示例
  1. 创建一个Maven web工程,作为一个服务的提供者
  2. pom文件中加入相关依赖
  3. 创建一个实体bean作为查询的结果
  4. 定义一个服务的接口和实现类
  5. 定义spring配置文件(Dubbo服务提供者的核心配置文件)
    1. 声明Dubbo服务提供者的名称:保证唯一
    2. 声明Dubbo使用的协议和端口号
    3. 暴露服务提供者的接口,使用直连方式
    4. 声明服务接口的实现类对象
  6. 定义测试类,测试配置文件是否有效
  7. 注册监听器,让spring可以在web应用中使用
  8. 导出接口和相关的类为一个jar文件,提供给消费者使用
2.服务的消费者示例
  1. 创建一个Maven web工程,作为服务的消费者,调用服务提供者的功能
  2. 配置pom文件:添加需要的依赖
    服务提供者的jar包
  3. 定义spring的核心配置文件(Dubbo消费者的配置文件)
    声明服务的名称
    声明要使用的服务,引用服务提供者
  4. 编写controller
  5. 配置中央调度器

遇到的问题:

  1. dubbo:reference标签中的id属性即为Dubbo创建的远程服务接口的代理对象的名称,可以使用这个id调用远程方法。

Dubbo服务化最佳实践

1.分包

建议将服务接口、服务模型、服务异常等均放在公共包中。

2.版本

每个接口都因该定义版本号,为后续不兼容升级提供可能。例如:

<dubbo:service interface="xxx" version="1.0"/>
3.改造Dubbo项目

将分散在多个项目中的公共接口、实体类、异常、工具类抽象在一个项目中,在其他项目比如服务提供者、消费者共用公共的资源。

4.Dubbo中常用的标签

Dubbo 中常用标签。分为三个类别:公用标签,服务提供者标签,服务消费者标签。

1.公用标签
  1. <dubbo:application name="服务名称"/>:配置应用信息
  2. 配置注册中心:<dubbo:registry address="ip:port" protocol="协议"/>
2.服务提供者标签
  1. 配置暴露的服务:<dubbo:service interface="服务接口名" ref="服务接口实现对象bean"/>
3.服务消费者
  1. 配置服务消费者引用远程服务:<dubbo:reference id="服务引用bean的id" interface="服务接口名"/>

注册中心Zookeeper

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

  1. Multicast 注册中心:组播方式
  2. Redis 注册中心:使用 Redis 作为注册中心
  3. Simple 注册中心:就是一个 dubbo 服务。作为注册中心。提供查找服务的功能。
  4. Zookeeper 注册中心:使用 Zookeeper 作为注册中心
    推荐使用 Zookeeper 注册中心。
1.Windows下安装和配置Zookeeper
  1. 复制E:\IDEA\zookeeper\apache-zookeeper-3.7.0-bin\conf目录下的zoo_sample.cfg配置文件,并将其改名为zoo.cfg
  2. 编辑zoo.cfg配置文件
1. dataDir : zookeeper 数据的存放目录
2. admin.serverPort=8888
原因:zookeeper 3.7.x 占用 8080

该配置文件主要的配置解释如下:

tickTime: 心跳的时间,单位毫秒. Zookeeper
服务器之间或客户端与服务器之间维持心跳的
时间间隔,也就是每个 tickTime 时间就会发送一个心跳。表明存活状态。
dataDir: 数据目录,可以是任意目录。存储 zookeeper
的快照文件、pid 文件,默认为
/tmp/zookeeper,建议在 zookeeper 安装目录下创建
data 目录,将 dataDir 配置改
为E:/IDEA/zookeeper/apache-zookeeper-3.7.0-bin/data
clientPort: 客户端连接 zookeeper 的端口,即 zookeeper
对外的服务端口,默认为 2181
2.Linux下安装和配置Zookeeper
  1. 解压
// -C参数表示解压到的目标目录
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C /usr/local/
  1. 与Windows下同
  2. 启动zookeeper:切换到安装目录的 bin 目录下./zkServer.sh start
  3. 查看zookeeper的运行状态:切换到安装目录的 bin 目录下./zkServer.sh status
  4. 关闭zookeeper:切换到安装目录的 bin 目录下./zkServer.sh stop
  5. 重启zooke:切换到安装目录的 bin 目录下./zkServer.sh restart
3.查看zookeeper上的已注册服务
  1. zookeeper的bin目录
  2. 执行zkcli.sh脚本
  3. 使用ls /命令查看有哪些zookeeper节点;
  4. 查看注册了哪些服务,使用ls /节点名称命令

Dubbo的配置

1.关闭检查
2.重试次数

消费者访问提供者,如果访问失败,则切换重试访问其它服务器.可以通过retries属性设置重试次数(不含第一次)。

// 例如重试次数配置如下
服务提供者:
<dubbo:service retries="2"/>
服务消费者:
<dubbo:reference retries="2"/>
3.超时时间

由于网络或服务端不可靠,会导致调用出现一种不确定的中间状态(超时)。为了避免超时,导致客户端资源(线程)挂起耗尽,必须设置超时时间。使用timeout属性设置超时时间。

示例:
Dubbo消费端指定接口超时配置
<dubbo:reference interface="xxx" timeout="2000"/>
Dubbo服务端指定接口超时配置
<dubbo:service interface="xxx" timeout="2000"/>
4.版本号

每个接口都应定义版本号,为后续不兼容升级提供可能。当一个接口有不同的实现,项目早期使用的一个实现类, 之后创建接口的新的实现类。区分不同的接口实现使用 version属性。特别是项目需要把早期接口的实现全部换位新的实现类,也需要使用version.可以用版本号从早期的接口实现过渡到新的接口实现,版本号不同的服务相互间不引用。

  1. 示例
1. 对于服务提供者:在使用<dubbo:service/>标签暴露服务时,
加上版本信息
2. 对于服务消费者:在使用<dubbo:reference/>标签引用远程服务时
指定使用的远程接口的版本信息

监控中心

为了更好的调试,发现问题,解决问题,因此引入 dubbo-admin。通过dubbo-admin可以对消费者和提供者进行管理。dubbo-admin是一个图形化的服务管理页面;安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理

1.dubbo-admin的安装与配置
  1. 打包:在GitHub下载完源码后,在dubbo-admin安装目录下打开CMD窗口执行命令
mvn clean package -Dmaven.test.skip=true

时间太久,不推荐
2. 修改配置dubbo-properties文件

server.port=7001 #表示访问应用的端口
spring.root.password=root #表示root用户的密码
#表示注册中心的地址
# 监控中心的数据来自注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181

  1. 执行命令运行打包后的jar文件
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
2.运行dubbo-admin 应用
  1. 先启动注册中心
  2. 执行提供者项目
  3. java -jar dubbo-admin-0.0.1-SNAPSHOT.jar启动dubbo 管理后台
  4. 在浏览器地址栏输入 http://localhost:7001 访问监控中心-控制台。