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

<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的相关属性
// 服务实现类,加@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集成的关键之一,使得开发分布式应用变得更加容易

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
"SpringBoot脚手架"是指在初始化一个SpringBoot项目时,提供一套已经配置好的模板或工具,以便于开发者快速搭建项目结构和集成各种组件。脚手架可以包含常用的配置、依赖项和代码片段,使得开发者能够更快地开始开发工作,而不需要从零开始搭建项目。 对于SpringBoot脚手架的整合,一般来说,可以按照以下步骤进行: 1. 确定项目所需的功能和组件,例如数据库连接池,可以选择Druid作为数据库连接池。 2. 在项目的配置文件中,配置相关的依赖和属性,例如Druid的配置项。 3. 在项目的主类中,使用注解或配置类来开启和配置组件的自动装配,例如@EnableAutoConfiguration或@Configuration。 4. 根据项目的需求,编写相应的业务逻辑和代码。 可以参考的示例项目是"springboot-plus",它是一个使用SpringBoot2.2.6、Dubbo2.7.3和zookeeper3.5.3的项目。项目的地址是https://gitee.com/xiandafu/springboot-plus。这个项目可以作为一个参考,帮助你了解如何使用SpringBoot脚手架来搭建和整合项目。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SpringBoot 项目脚手架](https://blog.csdn.net/liuge36/article/details/103287758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [15款Spring开源项目脚手架,全面&给力(收藏款)](https://blog.csdn.net/qq_42914528/article/details/106990715)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aomsir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值