Dubbo3技术一套通之整合SpringBoot

  • 作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者!
  • 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客
  • 当前专栏:Dubbo3应用专栏_Aomsir的博客-CSDN博客

文章目录

  • 前言
  • 整合分析
  • 整合编码
    • Provider端
    • Consumer端
  • 注解分析
    • @EnableDubbo
    • @DubboService
    • @DubboReference
  • 参考文献

前言

前文中,我们使用了Spring配置文件来整合Dubbo进行直连开发,这让我们更直观地了解了Dubbo的RPC调用方式,摘掉它神秘的面纱,也为后面引入注册中心开发埋下伏笔,而不是只知道打个注解就能进行开发,出现问题不知如何解决。然而,在当今的主流开发中,我们通常使用Spring Boot作为脚手架来构建应用程序,这带来了更多便捷性和自动化特性。不再需要繁琐的配置,只需添加一些注解就能够使用Dubbo了。
接下来,我将详细讨论如何使用Spring Boot来整合Dubbo进行开发,让你能够更轻松地构建分布式系统。

整合分析

在直连开发初探中使用Spring配置文件开发,无论是服务提供端还是服务消费方都有很多的共有配置,比如应用名、端口、使用的协议等,现在我们可以将这些信息配置信息迁移到application.yml中

此外,还有个性化配置方面的考虑。在使用Spring配置文件的情况下,对于服务提供方,我们需要将具体的服务注册到Spring容器中,然后Dubbo将这个服务进行发布。这意味着对于每个服务,我们需要编写两个标签,这样的配置显得相当繁琐。对于服务消费方来说,我们需要使用Dubbo的标签来书写远程调用的地址,而这段地址中又包含了很多冗余信息。

然而,在引入Spring Boot之后,我们可以使用注解来实现这些功能,使开发变得更加快捷。对于服务提供方,我们可以使用注解将服务发布到Spring容器中,而不必手动编写XML配置。对于服务消费方,Spring Boot能够自动处理远程调用的配置,无需显式指定冗余信息,让代码更加清晰简洁。这种方式大大简化了开发过程,减少了冗余代码的编写,提高了开发效率。

整合编码

在整合Spring Boot 方面,关于 api 模块的配置不需要进行冗述,我们将继续使用之前的模块结构。接下来,对于 provider端consumer端,我们需要引入 dubbo-spring-boot-starter 依赖。

这个依赖是整合Dubbo和Spring Boot的关键,它提供了Dubbo所需的自动配置,使得Dubbo的集成变得轻松且高效。通过引入 dubbo-spring-boot-starter,我们能够借助Spring Boot的自动化特性来简化Dubbo服务提供方和服务消费方的配置,从而更加专注于业务逻辑的开发

<dependency>
    <groupId>org.apache.dubbogroupId>
    <artifactId>dubbo-spring-boot-starterartifactId>
    <version>3.2.0version>
dependency>

Provider端

引入了dubbo-spring-boot-starter依赖后,provider端的开发步骤变得简化明了。下面是具体的开发步骤

  • 实现API模块中提供的服务接口,并在实现类上标注 @DubboService 注解
  • 在启动类上添加 @EnableDubbo 注解,以启用Dubbo的自动配置功能
  • 编写 application.yml 配置文件,配置Dubbo的相关属性
// 服务实现类,加@DubboService注解
@DubboService
public class UserServiceImpl implements UserService{
// SpringBoot启动类,加@EnableDubbo注解
@SpringBootApplication
@EnableDubbo
public class Dubbo04BootProviderApplication {
#application也可以使用dubbo.allication.name
spring:
  application:
    name: DUBBO-04-BOOT-PROVIDER
dubbo:
  protocol:
    name: dubbo
    port: -1

Consumer端

在引入了dubbo-spring-boot-starter依赖后,consumer端的开发也变得相当简单。以下是具体的开发步骤

  • 编写application.yml配置文件,用于配置Dubbo的相关属性
  • 使用@DubboReference注解来获取远程服务的Stub对象
  • 编写测试方法进行测试(同时也需要编写一个启动类)
spring:
  application:
    name: DUBBO-05-BOOT-CONSUMER
dubbo:
  application:
    qos-enable: false
@SpringBootTest
class Dubbo05BootConsumerApplicationTests {

    // 填写远程调用的地址
    @DubboReference(url = "dubbo://192.168.1.149:20880/com.aomsir.service.UserService?serialization=kryo")
    private UserService userService;

    @Test
    void test1() {
        this.userService.login("Aomsir", "123456");
    }
}

注解分析

@EnableDubbo

@EnableDubbo注解用于扫描当前包及其子包目录下标注了 @DubboService注解的实现类,然后将这些实现类进行注册并发布为Dubbo服务。如果你需要指定特定的包路径进行扫描,可以使用 @DubboComponentScan注解来指定扫描路径

这种自动扫描和注册的方式让Dubbo的服务提供方配置变得更加简单,无需手动编写繁琐的XML配置文件。通过这种方式,你只需关注业务实现类的编写,Dubbo会自动识别和发布这些服务,从而减少了开发工作的复杂性和重复性。这是Spring Boot和Dubbo集成的便捷之处

@DubboService

@DubboService注解应该添加在服务接口的实现类上,当使用了这个注解后,Spring会将该实现类注入到容器中,并同时将这个实现类发布为Dubbo服务。可以说,@DubboService注解的作用相当于 @Component@Service、以及 @Bean 这三个注解的综合作用

通过使用 @DubboService注解,你不仅告诉Spring容器将这个实现类纳入扫描和管理的范围,还通知Dubbo框架将这个实现类作为一个可用的远程服务发布,以便其他模块或服务可以远程调用它。这种综合作用使得Dubbo服务提供方的配置和发布变得非常便捷,减少了开发工作的复杂性

@DubboReference

@DubboReference注解通常用于消费者端,它的作用是在消费者端创建远程服务的代理对象。通过这个代理对象,我们可以在程序中发起RPC(远程过程调用)调用,调用远程提供者的服务

当使用 @DubboReference 注解标注在某个字段或方法上时,Spring Boot会自动为该字段或方法生成一个代理对象,该代理对象实际上负责与远程Dubbo服务进行通信,将方法调用转发给远程提供者,然后将结果返回给调用方。这个过程对于消费者来说是透明的,因此消费者可以像调用本地服务一样方便地调用远程Dubbo服务

通过@DubboReference注解,我们可以轻松地实现分布式系统中的服务调用,无需关心底层的网络通信细节,从而简化了消费者端的开发工作。这种注解是Dubbo和Spring Boot集成的关键之一,使得开发分布式应用变得更加容易

参考文献

  • 孙哥说分布式之Dubbo技术一套通
  • Dubbo官方文档
  • Spring官方文档

你可能感兴趣的:(Dubbo3应用专栏,spring,boot,后端,java,dubbo,微服务,分布式)