Dubbo 入门 - 实战篇(基于 Spring Boot 实现)

发布于 更新于
本文目录
  1. Dubbo应用
  2. RPC通信
  3. 服务发现
  4. 流量治理
  5. 部署架构
  6. 其他内容
  7. Dubbo示例
  8. 需求
  9. 实现逻辑
  10. 代码概览

技术文章接口测试

Apache Dubbo 3构建在 HTTP/2 协议之上,具有更好的穿透性与通用性 , 支持基于 IDL 的服务定义

Dubbo应用

RPC通信

  • Apache Dubbo 3构建在 HTTP/2 协议之上,具有更好的穿透性与通用性 , 支持基于 IDL 的服务定义

  • 集成了业界主流的大部分协议,使得用户可以在 Dubbo 框架范围内使用这些通信协议 , 这些协议包括 rest、hessian2、jsonrpc、thrift 等

服务发现

  • 即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与 IP 地址的情况下实现通信

  • Dubbo 提供的是一种 Client-Based 的服务发现机制,通常还需要部署额外的第三方注册中心组件来协调服务发现过程,如常用的 Nacos、Consul、Zookeeper 等,Dubbo 自身也提供了对多种注册中心组件的对接,用户可以灵活选择

  • Dubbo服务注册与发现过程如下图(图片来自官网):

    dubbo服务发现.png

流量治理

  • Dubbo 提供了丰富服务治理规则,包括路由规则、动态配置等

部署架构

  • Dubbo 作为一个微服务框架,为在分布式环境下实现各个微服务组件间的协作,定义了一系列中心化组件,包括

    • 注册中心:协调服务提供者(Provider)和服务消费者(Consumer)之间的地址注册与发现

    • 配置中心:

      • 存储 Dubbo 启动阶段的全局配置,保证配置的跨环境共享与全局一致性

      • 负责服务治理规则(路由规则、动态配置等)的存储与推送

    • 元数据中心:

      • 接收 Provider 上报的服务接口元数据,为 Admin 等控制台提供运维能力(如服务测试、接口文档等)

      • 作为服务发现机制的补充,提供额外的接口/方法级别配置信息的同步能力,相当于注册中心的额外扩展

  • 下图描述了Dubbo各服务组件间协调的交互图(图片来自官网):

    dubbo核心组件.png

其他内容

Dubbo示例

需求

  • 构建一个基于用户的CRUD服务

  • 服务提供者(Provider)根据契约提供服务

  • 服务消费者(Consumer)根据契约消费服务

  • 服务消费者(Consumer)以泛化方式消费服务

实现逻辑

dubbo实现逻辑.png
  • 分别开发如下项目,实现需求(如上图)

    • 服务接口项目:定义的服务规范IUserService、公共实体类UserEntity

    • 服务提供者(Provider)项目:

      • 引入Nacos注册依赖

      • 添加注册到指定Nacos服务注册中心的配置

      • 引入契约接口依赖

      • 定义UserService服务实现,定义实际的业务逻辑,继承于IUserService,并使用公共实体类UserEntity

    • 服务消费者(Consumer)项目:

      • 引入Nacos注册依赖

      • 添加订阅指定Nacos服务注册中心的配置

      • 引入契约接口依赖

      • 定义自身业务,在需要时,按需自动装配IUserService接口实现,使用装配对象逻辑完成自身业务,就如调用本地实现一样,实际使用的是通过Nacos订阅服务提供者提供的服务逻辑

    • Nacos注册中心:

      • 提供服务提供者(Provider)的注册

      • 提供服务消费者(Consumer)的订阅

    • 服务消费者(Consumer)--泛化消费

      • 引入Nacos注册依赖

      • 添加订阅指定Nacos服务注册中心的配置

      • 无需引入契约接口依赖

      • 定义自身业务,在需要时,使用Dubbo提供的泛化工具类,实现对IUserService服务接口的调用,也如调用本地实现一样,实际使用的是通过Nacos订阅服务提供者提供的逻辑

代码概览

  • 服务接口项目

    • 定义普通Spring Boot类库项目,定义接口IUserService、实体类UserEntity、标准响应封装ResponseData

    • 具体见项目dubbo-interface,代码结构如下图

      dubbointerface.png
  • 服务提供者项目

    • 定义一个普通的Spring Boot项目,引入契约接口项目dubbo-interface,实现IUserService接口,实现业务逻辑

    • 实现步骤:

      1. 在pom.xml中引入如下依赖

        • dubbo依赖:org.apache.dubbo.dubbo:3.0.3

        • nacos注册依赖:org.apache.dubbo.dubbo-registry-nacos:3.0.3、com.alibaba.spring.spring-context-support:1.0.11

        • 引入契约接口dubbo-interface依赖

      2. 在application.properties中添加nacos配置,包括服务名称、协议、nacos服务器地址等

      3. 启用Dubbo,在启动类上添加@EnableDubbo注解

      4. 标识Dubbo服务,在继承于契约接口dubbo-interface中IUserService的服务类上进行标识,会注册到Nacos注册中心

         @DubboService(version = "$版本号")
         public class UserService implements IUserService{
             //实现契约接口逻辑
         }
      5. 定义Dubbo服务拦截器,通过实现Filter接口实现,可选

    • 具体见项目dubbo-provider,代码结构如下图

      dubboprovider.png
  • 服务消费者项目

    • 定义一个普通的Spring Boot项目,引入契约接口项目dubbo-interface,在自身的业务中,自动装配IUserService对象,调用服务提供者实现的业务逻辑

    • 实现步骤:

      1. 在pom.xml中引入如下依赖

        • dubbo依赖:org.apache.dubbo.dubbo:3.0.3

        • nacos注册依赖:org.apache.dubbo.dubbo-registry-nacos:3.0.3、com.alibaba.spring.spring-context-support:1.0.11

        • 引入契约接口dubbo-interface依赖

      2. 在application.properties中添加nacos配置,包括服务名称、协议、nacos服务器地址等

      3. 启用Dubbo,在启动类上添加@EnableDubbo注解

      4. 使用Dubbo服务,在自身的业务代码中,按需自动装配服务接口IUserService来调用 ,注意版本号要与服务提供者中的服务想匹配

         public class UserController {
             @DubboReference(version = "版本号")
             IUserService userService;
        
             //在方法中使用userService对象即可
         }
    • 具体见项目dubbo-consumer,代码结构如下图

      dubboconsumer.png
  • 服务消费者项目-泛化消费

    • 定义一个普通的Spring Boot项目,引入契约接口项目dubbo-interface,在自身的业务中,通过Dubbo泛化工具类,使用IUserService规则,调用服务提供者实现的业务逻辑

    • 实现步骤:

      1. 在pom.xml中引入如下依赖

        • dubbo依赖:org.apache.dubbo.dubbo:3.0.3

        • nacos注册依赖:org.apache.dubbo.dubbo-registry-nacos:3.0.3、com.alibaba.spring.spring-context-support:1.0.11

        • 引入契约接口dubbo-interface依赖

      2. 在application.properties中添加nacos配置,包括服务名称、协议、nacos服务器地址等

      3. 启用Dubbo,在启动类上添加@EnableDubbo注解

      4. 使用Dubbo工具进行泛化方式消费服务,代码稍复杂,具体见代码中的util工具包

      5. 具体见项目dubbo-consumer-generic,代码结构如下图dubboconsumergeneric.png

【实现过程和示例代码将会在Java测试开发课程中讲解,示例代码可联系管理员领取】

来源:testingpai

继续阅读