Dubbo3技术一套通之整合SpringBoot

前言

前文中,我们使用了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服务提供方和服务消费方的配置,从而更加专注于业务逻辑的开发

xml 复制代码
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>3.2.0</version>
</dependency>

Provider端

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

  • 实现API模块中提供的服务接口,并在实现类上标注 @DubboService 注解
  • 在启动类上添加 @EnableDubbo 注解,以启用Dubbo的自动配置功能
  • 编写 application.yml 配置文件,配置Dubbo的相关属性
java 复制代码
// 服务实现类,加@DubboService注解
@DubboService
public class UserServiceImpl implements UserService{
java 复制代码
// SpringBoot启动类,加@EnableDubbo注解
@SpringBootApplication
@EnableDubbo
public class Dubbo04BootProviderApplication {
yml 复制代码
#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对象
  • 编写测试方法进行测试(同时也需要编写一个启动类)
yml 复制代码
spring:
  application:
    name: DUBBO-05-BOOT-CONSUMER
dubbo:
  application:
    qos-enable: false
java 复制代码
@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集成的关键之一,使得开发分布式应用变得更加容易

参考文献

相关推荐
向阳12183 小时前
Dubbo负载均衡
java·运维·负载均衡·dubbo
掘金-我是哪吒4 小时前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务
茶馆大橘5 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
想进大厂的小王8 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
九卷技术录9 小时前
(微服务)服务治理:几种开源限流算法库/应用软件介绍和使用
微服务·服务治理·限流算法
阿伟*rui9 小时前
认识微服务,微服务的拆分,服务治理(nacos注册中心,远程调用)
微服务·架构·firefox
想进大厂的小王12 小时前
Spring-cloud 微服务 服务注册_服务发现-Eureka
微服务·eureka·服务发现
Gemini199516 小时前
分布式和微服务的区别
分布式·微服务·架构
茶馆大橘1 天前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
coding侠客1 天前
揭秘!微服务架构下,Apollo 配置中心凭啥扮演关键角色?
微服务·云原生·架构