当前位置: 首页 > article >正文

使用Dubbo: 创建基于Spring Boot的微服务应用

Maven 依赖

使用 Dubbo Spring Boot Starter,首先引入以下 Maven 依赖

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-bom</artifactId>
                <version>3.3.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

然后,在相应模块的 pom 中增加必要的 starter 依赖:

    <dependencies>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-nacos-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

dubbo-spring-boot-starter 和 dubbo-zookeeper-spring-boot-starter 是官方提供的 starter,提供了 Spring Boot 的集成适配,它们的版本号与 Dubbbo 主框架版本号完全一致。Dubbo 还支持 dubbo-nacos-spring-boot-starter 等 starter,具体可查看参见 starter 列表。

starter列表

以下是一些 dubbo-spring-boot-starter 版本对应的 SpringBoot、JDK 依赖:

版本兼容 Spring Boot 范围
3.3.x[1.x ~ 3.x)
3.2.x[1.x ~ 3.x)
3.1.x[1.x ~ 2.x)
2.7.x[1.x ~ 2.x)

其他组件starter

以下是 Dubbo 官方社区提供的 starter 列表(3.3.0+ 版本),方便在 Spring Boot 应用中快速使用:

  • dubbo-spring-boot-starter,管理 dubbo 核心依赖,用于识别 application.properties 或 application.yml 中 dubbo. 开头的配置项,扫描 @DubboService 等注解。
  • dubbo-spring-boot-starter3,管理 dubbo 核心依赖,与 dubbo-spring-boot-starter 相同,支持 spring boot 3.2 版本。
  • dubbo-nacos-spring-boot-starter,管理 nacos-client 等依赖,使用 Nacos 作为注册中心、配置中心时引入。
  • dubbo-zookeeper-spring-boot-starter,管理 zookeeper、curator 等依赖,使用 Zookeeper 作为注册中心、配置中心时引入(Zookeeper server 3.4 及以下版本使用)。
  • dubbo-zookeeper-curator5-spring-boot-starter,管理 zookeeper、curator5 等依赖,使用 Zookeeper 作为注册中心、配置中心时引入。
  • dubbo-sentinel-spring-boot-starter,管理 sentinel 等依赖,使用 Sentinel 进行限流降级时引入。
  • dubbo-seata-spring-boot-starter,管理 seata 等依赖,使用 Seata 作为分布式事务解决方案时引入。
  • dubbo-observability-spring-boot-starter,加入该依赖将自动开启 Dubbo 内置的 metrics 采集,可用于后续的 Prometheus、Grafana 等监控系统。
  • dubbo-tracing-brave-spring-boot-starter,管理 brave/zipkin、micrometer 等相关相关依赖,使用 Brave/Zipkin 作为 Tracer,将 Trace 信息 export 到 Zipkin。
  • dubbo-tracing-otel-otlp-spring-boot-starter,管理 brave/zipkin、micrometer 等相关相关依赖,使用 OpenTelemetry 作为 Tracer,将 Trace 信息 export 到 OTlp Collector。
  • dubbo-tracing-otel-zipkin-spring-boot-starter,管理 brave/zipkin、micrometer 等相关相关依赖,使用 OpenTelemetry 作为 Tracer,将 Trace 信息 export 到 Zipkin。

 application.yml 配置文件

# Alibaba dubbo (RPC) 配置
dubbo:
  group: DUBBO_GROUP
  application:
    name: ${spring.application.name}  #唯一名称
    qos-port: 22222
    group:  ${dubbo.group}
  consumer:
    timeout: 5000  # 设置本服务调用超时时间为5000毫秒
    check: false   # 消费端是否检查提供者是否存在,false表示不检查,true表示检查
    group: ${dubbo.group}
  provider:
    group: ${dubbo.group}
  scan:
    # dubbo 服务扫描基准包
    base-packages: com.tibiot.cloud.card, com.tibiot.cloud.adaptor, com.tibiot.cloud.common
  protocol:
    # dubbo 协议
    name: dubbo
    # dubbo 协议端口( -1 表示自增端口,从 20880 开始)
    port: -1
  registry:
    # Dubbo3.0.0版本以后,增加了是否注册消费者的参数,如果需要将消费者注册到nacos注册中心上,需要将参数(register-consumer-url)设置为true,默认是false。
    address: nacos://${spring.cloud.nacos.discovery.server-addr}?register-consumer-url=true&namespace=${spring.cloud.nacos.discovery.namespace}&group=${dubbo.group}
    file: ./dubbo-cache/dubbo-registry.properties
  cloud:
    subscribed-services: ${spring.application.name}

应用入口

@EnableDubbo 注解用来加载和启动 Dubbo 相关组件。

@SpringBootApplication
@EnableDubbo
public class QuickStartApplication {
    public static void main(String[] args) {
        SpringApplication.run(QuickStartApplication.class, args);
    }
}

服务定义

以下是基于 Java Interface 的标准 Dubbo 服务定义。

public interface DemoService {
    String sayHello(String name);
}

在 DemoService 中,定义了 sayHello 这个方法。后续服务端发布的服务,消费端订阅的服务都是围绕着 DemoService 接口展开的。

服务实现

定义了服务接口之后,可以在服务端这一侧定义对应的业务逻辑实现。

@DubboService
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        return "Hello " + name;
    }
}

DemoServiceImpl 类中添加了 @DubboService 注解,通过这个配置可以基于 Spring Boot 去发布 Dubbo 服务。

发起服务调用

示例应用中有一个 consumer 包,用于模拟发起对 provider 服务的远程调用。

@Component
public class Consumer implements CommandLineRunner {
    @DubboReference
    private DemoService demoService;

    @Override
    public void run(String... args) throws Exception {
        String result = demoService.sayHello("world");
        System.out.println("Receive result ======> " + result);
    }
}

在 Task 类中,通过@DubboReference 从 Dubbo 获取了一个 RPC 订阅代理,这个 demoService 代理可以像本地调用一样直接调用: demoService.sayHello("world")

发布服务定义到远端仓库

应用开发完成后,我们需要将服务定义(在此示例中是 DemoService 接口定义)发布到外部公开的或组织内部的 maven 仓库,以便调用这些服务的应用能够加载并使用这些服务定义。

如之前我们看到的,示例项目包含 api、service 两个模块,切换项目到 api 目录,以下命令即可完成发布动作:

mvn clean deploy

http://www.kler.cn/a/419549.html

相关文章:

  • TIE算法具体求解-为什么是泊松方程和傅里叶变换
  • C语言:指针与数组
  • 【AI系统】代数简化
  • 【Android 的GC机制】
  • 浅谈edusrc挖掘技巧+信息收集新姿势
  • OpenCV_Code_LOG
  • c++:string类
  • 网络安全防护指南
  • 《Python 视频格式转换全攻略》
  • HOG(Histogram of Oriented Gradients)特征提取原理及应用场景
  • 医院管理系统
  • 为什么爱用低秩矩阵
  • 题目 1013: [编程入门]Sn的公式求和
  • 设计模式:14、抽象工厂模式(配套)
  • 高校心理教育辅导系统
  • C#使用Graphics、Pen 和 Brush 类进行2D图形绘制
  • 汽车IVI中控OS Linux driver开发实操(二十七):常用Linux指令
  • [2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(4))
  • 前端框架的选择与反思:在简约与复杂之间寻找平衡
  • 使用Ansible自动化部署Zabbix6监控
  • 困扰解决:mfc140u.dll丢失的解决方法,多种有效解决方法全解析
  • 小程序-基于java+SpringBoot+Vue的校园快递平台系统设计与实现
  • 动态主机配置协议(DHCP)
  • 10 设计模式之装饰模式
  • 全面解析 C++ STL 中的 set 和 map
  • 各类 AI API获取方法,GPT | Claude | Midjourney等