Spring Boot3 中如何整合 Dubbo 实现简单的微服务调用?

在当今的互联网大厂后端开发领域,微服务架构已成为构建大型应用的主流方式。Spring Boot3 以其强大的简化开发特性备受青睐,而 Dubbo 作为高性能、轻量级的开源 RPC 框架,在微服务通信与治理方面表现卓越。将两者整合,能够助力开发者高效构建稳定、可扩展的分布式系统。那么,究竟如何在 Spring Boot3 中整合 Dubbo 来实现简单的微服务调用呢?接下来,我们就逐步深入探讨。

准备工作

环境搭建

首先,确保你的开发环境中安装了 Java 17 及以上版本,因为 Spring Boot3 需要 Java 17 的支持。同时,安装好 Maven 或 Gradle 构建工具,方便管理项目依赖。

创建 Spring Boot3 项目

通过 Spring Initializr(https://start.spring.io/ )创建一个新的 Spring Boot3 项目。在创建过程中,选择合适的项目元信息,如项目名称、包名等。并且,务必勾选 Spring Web 依赖,因为后续我们需要通过 HTTP 来访问微服务接口。

添加 Dubbo 依赖

创建好 Spring Boot 项目后,在项目的 pom.xml 文件(如果使用 Maven)或 build.gradle 文件(如果使用 Gradle)中添加 Dubbo 相关依赖。Dubbo 3 相比之前的版本,在包引入等方面有了优化,现在我们只需要引入两个关键包:dubbo-spring-boot-starter 和
dubbo-zookeeper-spring-boot-starter 。

如果使用 Maven,在 pom.xml 中添加如下依赖:

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>3.2.1</version> <!-- 请根据实际情况选择最新版本 -->
</dependency>
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-zookeeper-spring-boot-starter</artifactId>
    <version>3.2.1</version> <!-- 请根据实际情况选择最新版本 -->
</dependency>

如果使用 Gradle,在 build.gradle 中添加:

implementation 'org.apache.dubbo:dubbo-spring-boot-starter:3.2.1' // 请根据实际情况选择最新版本
implementation 'org.apache.dubbo:dubbo-zookeeper-spring-boot-starter:3.2.1' // 请根据实际情况选择最新版本

Dubbo 服务接口与实现

定义服务接口

创建一个 Java 接口,该接口将定义我们要提供的微服务功能。例如,创建一个名为HelloService的接口,其中包含一个sayHello方法:

package com.example.demo.service;

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

实现服务接口

接着,创建一个类来实现上述接口。在 Dubbo 3 中,使用@DubboService注解来标记该服务实现类,以区别于 Spring 的@Service注解(从 3.0 版本开始,Dubbo 不再使用@Service注解来标识 Dubbo 服务,避免与 Spring 的注解混淆)。

package com.example.demo.service.impl;

import com.example.demo.service.HelloService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;

@DubboService
@Component
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name + "! This is a Dubbo service in Spring Boot3.";
    }
}

配置 Dubbo

在 Spring Boot 的配置文件(application.yml 或 application.properties)中进行 Dubbo 相关配置。

基础配置

配置应用名称、Dubbo 协议和端口等基础信息。这里我们将 Dubbo 协议名称设置为dubbo,端口设置为-1,表示让 Dubbo 自动分配可用端口。

dubbo:
  application:
    name: dubbo-springboot3-demo
  protocol:
    name: dubbo
    port: -1

注册中心配置

Dubbo 需要一个注册中心来管理服务的注册与发现。常见的注册中心有 Zookeeper、Nacos 等,这里我们以 Zookeeper 为例。假设你的 Zookeeper 服务器地址为127.0.0.1:2181,在配置文件中添加如下配置:

dubbo:
  registry:
    address: zookeeper://127.0.0.1:2181

包扫描配置

告诉 Dubbo 扫描哪些包来查找服务实现类,以便将其注册到注册中心。假设我们的服务实现类在
com.example.demo.service.impl包下,配置如下:

dubbo:
  scan:
    base-packages: com.example.demo.service.impl

Dubbo 服务消费者

创建服务消费者

创建一个新的 Spring Boot 项目作为服务消费者,同样添加 Dubbo 相关依赖以及 Spring Web 依赖。

引入服务接口

在服务消费者项目中,需要引入服务提供者定义的服务接口HelloService。可以通过 Maven 或 Gradle 的依赖管理,将服务提供者项目的接口模块引入到消费者项目中。

配置消费者

在消费者项目的配置文件中,配置 Dubbo 相关信息,与服务提供者类似,包括应用名称、注册中心地址等。

dubbo:
  application:
    name: dubbo-springboot3-consumer-demo
  registry:
    address: zookeeper://127.0.0.1:2181

调用服务

在消费者项目中,创建一个控制器类,使用@DubboReference注解(从 3.0 版本开始,@Reference注解废弃,使用@DubboReference注解来引用远程服务,以区别于 Spring 的@Reference注解)将远程服务注入到控制器中,然后就可以像调用本地方法一样调用远程服务了。

package com.example.demo.controller;

import com.example.demo.service.HelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @DubboReference
    private HelloService helloService;

    @GetMapping("/hello")
    public String hello(@RequestParam String name) {
        return helloService.sayHello(name);
    }
}

启动与测试

启动 Zookeeper

确保 Zookeeper 服务器已经启动并正常运行。如果是本地开发,启动 Zookeeper 的命令通常为(假设你已经正确配置了 Zookeeper 环境变量):

zkServer.sh start

启动服务提供者

启动 Spring Boot 服务提供者项目,启动类上需要添加@EnableDubbo注解(Dubbo 3 需要显式添加该注解,在 2.X 版本时部分场景不需要),以开启 Dubbo 的支持。

package com.example.demo;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

服务提供者启动后,会将自己的服务注册到 Zookeeper 注册中心。

启动服务消费者

启动 Spring Boot 服务消费者项目。消费者启动后,会从 Zookeeper 注册中心获取服务提供者的地址信息,并建立连接。

测试调用

打开浏览器或使用工具(如 Postman),访问服务消费者的接口,例如:
http://localhost:8080/hello?name=world 。如果一切配置正确,你将看到服务提供者返回的结果:Hello, world! This is a Dubbo service in Spring Boot3. 。

总结

通过以上步骤,我们成功地在 Spring Boot3 中整合了 Dubbo,实现了简单的微服务调用。在实际项目中,你还可以根据需求进一步优化和扩展,如配置 Dubbo 的负载均衡策略、超时时间、重试次数等,以满足不同的业务场景。希望这篇文章能帮助各位互联网大厂后端开发人员快速上手 Spring Boot3 与 Dubbo 的整合开发。

相关文章

Elasticsearch在Java项目的搜索实践:从零开始构建高效搜索系统

Elasticsearch在Java项目中的搜索实践:从零开始构建高效搜索系统在现代的Java项目中,数据量激增,传统的数据库查询方式已经无法满足快速检索的需求。这时,Elasticsearch (E...

Docker容器化Java应用的完整流程:从零到部署

Docker容器化Java应用的完整流程:从零到部署开篇故事:小明的Java项目烦恼小明是一个热爱Java编程的开发者,最近他完成了一个功能丰富的电商后端服务。然而,当他想把项目交给团队运维人员进行部...

手把手教你!如何在 Linux 服务器中搭建 Sentinel 环境?

你在 Linux 服务器上搭建 Sentinel 环境时,是不是也遇到过各种报错,要么是启动失败,要么是配置后无法正常访问控制台?看着同事顺利搭建好,自己却一头雾水,别提多着急了!其实,很多互联网大厂...

Jenkins持续集成在Java项目中的妙用

Jenkins持续集成在Java项目中的妙用什么是Jenkins?Jenkins是一个开源的自动化服务器,它可以帮助开发者实现软件开发的持续集成和持续交付。听起来是不是很厉害?实际上,Jenkins就...

Java开发者的代码规范与习惯养成

Java开发者的代码规范与习惯养成作为一名Java开发者,养成良好的代码规范和习惯是迈向卓越的关键一步。代码规范不仅仅是为了让代码看起来整齐美观,更重要的是为了提高代码的可读性、可维护性和团队协作效率...

第一篇:如何使用 uv 创建 Python 虚拟环境

想象一下,你有一个使用 Python 3.10 的后端应用程序,系统全局安装了 a2.1、b2.2 和 c2.3 这些包。一切运行正常,直到你开始一个新项目,它也使用 Python 3.10,但需要...