Spring Boot 集成 Dubbo 可以帮助我们更方便地构建微服务架构。在使用 Spring Boot 和 Dubbo 进行微服务开发时,我们通常会创建服务提供者(Provider)和服务消费者(Consumer)两个项目。
1. 环境准备
- JDK:8+
- Maven:3.x
- Spring Boot:2.5.x 或更高版本
- Dubbo:3.x
- Zookeeper:作为注册中心(需要本地安装或使用 Docker 部署)
2. 服务提供者(Provider)实现
2.1 创建 Spring Boot 项目
使用 Maven 创建一个 Spring Boot 项目,并添加 Dubbo 和 Zookeeper 相关依赖。
pom.xml
:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>dubbo-provider</artifactId>
<version>1.0.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- Dubbo Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!-- Zookeeper Client -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.4.0</version>
</dependency>
<!-- Spring Boot Test Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.2 创建服务接口
在 src/main/java/com/example/dubbo/provider
目录下创建一个名为 service
的包,定义服务接口 HelloService
:
HelloService.java
:
package com.example.dubbo.provider.service;
public interface HelloService {
String sayHello(String name);
}
2.3 实现服务接口
在 src/main/java/com/example/dubbo/provider/service/impl
目录下创建一个名为 impl
的包,创建 HelloServiceImpl
类实现服务接口:
HelloServiceImpl.java
:
package com.example.dubbo.provider.service.impl;
import com.example.dubbo.provider.service.HelloService;
import org.apache.dubbo.config.annotation.DubboService;
@DubboService(version = "1.0.0") // 使用 DubboService 注解暴露服务
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name) {
return "Hello, " + name;
}
}
2.4 配置 application.yml
在 src/main/resources
目录下创建 application.yml
文件,配置 Dubbo 和 Zookeeper 相关信息:
application.yml
:
server:
port: 8081
dubbo:
application:
name: dubbo-provider
registry:
address: zookeeper://127.0.0.1:2181 # Zookeeper 注册中心地址
protocol:
name: dubbo
port: 20880 # Dubbo 服务端口
2.5 编写启动类
在 src/main/java/com/example/dubbo/provider
目录下创建 DubboProviderApplication.java
启动类:
DubboProviderApplication.java
:
package com.example.dubbo.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
3. 服务消费者(Consumer)实现
3.1 创建 Spring Boot 项目
使用 Maven 创建另一个 Spring Boot 项目,并添加 Dubbo 和 Zookeeper 相关依赖。
pom.xml
:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://www.w3.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>dubbo-consumer</artifactId>
<version>1.0.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- Dubbo Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!-- Zookeeper Client -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.4.0</version>
</dependency>
<!-- Spring Boot Test Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.2 创建服务接口
在 src/main/java/com/example/dubbo/consumer
目录下创建一个名为 service
的包,定义服务接口 HelloService
。注意,这个接口和服务提供者的接口需要保持一致。
HelloService.java
:
package com.example.dubbo.consumer.service;
public interface HelloService {
String sayHello(String name);
}
3.3 调用远程服务
在 src/main/java/com/example/dubbo/consumer/controller
目录下创建一个 HelloController
类,调用远程服务:
HelloController.java
:
package com.example.dubbo.consumer.controller;
import com.example.dubbo.consumer.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(version = "1.0.0") // 使用 DubboReference 注解引用远程服务
private HelloService helloService;
@GetMapping("/sayHello")
public String sayHello(@RequestParam String name) {
return helloService.sayHello(name);
}
}
3.4 配置 application.yml
在 src/main/resources
目录下创建 application.yml
文件,配置 Dubbo 和 Zookeeper 相关信息:
application.yml
:
server:
port: 8082
dubbo:
application:
name: dubbo-consumer
registry:
address: zookeeper://127.0.0.1:2181 # Zookeeper 注册中心地址
consumer:
check: false # 设置为 false,避免消费者启动时检查提供者状态
3.5 编写启动类
在 src/main/java/com/example/dubbo/consumer
目录下创建 DubboConsumerApplication.java
启动
类:
DubboConsumerApplication.java
:
package com.example.dubbo.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
}
4. 启动与测试
-
启动 Zookeeper:确保本地已安装并启动了 Zookeeper 注册中心,或者使用 Docker 启动 Zookeeper。
-
启动服务提供者:运行
DubboProviderApplication
的main
方法,启动服务提供者。 -
启动服务消费者:运行
DubboConsumerApplication
的main
方法,启动服务消费者。 -
测试服务:在浏览器或 Postman 中访问
http://localhost:8082/sayHello?name=Dubbo
,可以看到返回结果Hello, Dubbo
,说明服务调用成功。
5. 结论
通过上述步骤,我们完成了一个完整的 Spring Boot 集成 Dubbo 的服务提供者和消费者项目。这种集成方式简单易用,适合快速构建基于 Dubbo 的微服务应用。通过使用 Zookeeper 作为注册中心,可以实现服务的动态注册与发现,同时利用 Dubbo 强大的服务治理功能,进一步提升系统的稳定性和可靠性。