系列文章:
本文在前文基础上进行开发:
关于Zookeeper的使用方式可以看这篇 文章:windows下Zookeeper的介绍、下载、安装
先保证Zookeeper已经安装和启动 
本文在上文基础上开发,上文结构如下: 
1.父模块增加依赖
点击父模块的pom.xml
增加dubbo和zookeeper的相关依赖 
参考代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<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.guo</groupId>
<artifactId>ds-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>ds-minio</module>
<module>ds-redis</module>
<module>ds-rabbit</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.2</version>
<relativePath/>
</parent>
<properties>
<java.version>17</java.version>
<minio.version>8.4.3</minio.version>
<dubbo.version>3.3.0</dubbo.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>${minio.version}</version>
</dependency>
<!– Dubbo 核心依赖 –>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!– Dubbo 依赖的 ZooKeeper 客户端(Curator) –>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
添加完后,记得刷新一下(mvn clean install)
2.dubbo-api模块
dubbo-api 不依赖任何 Spring Boot 组件,只定义 Java 接口。
2.1 创建模块
右击父模块,选择 “新建”—>“模块”
左侧选择“java”,然后输入ds-api,构建方式选maven,jdk选17,然后点击“创建” 
2.2 修改依赖文件pom.xml
创建完后,点击本模块(ds-api)的依赖文件,把多余的内容删掉。

2.3 增加接口文件
右击本模块的java文件夹,选择“新建”,然后点击“软件包” 
软件包名为:com.guo.dubbo.api
然后,继续右击刚才创建的api文件夹,然后选择“新建”,再选择“Java类” 
类名为:UserService
参考代码如下:
package com.guo.dubbo.api;
public interface UserService {
String getUserInfo(String userId);
void updateUserAvatar(String userId, String avatarUrl);
}
创建完后,项目结构如下: 
3.dubbo-provider模块
3.1 创建模块
右击父工程,选择“新建”,然后选择“模块”
左侧选”Java“,右侧模块名为ds-provier,构建系统选Maven,JDK选17,然后点击”创建“ 
3.2 增加依赖
点击本模块(ds-provider)的pom.xml文件,然后增加依赖代码。
参考代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>com.guo</groupId>
<artifactId>ds-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>ds-provider</artifactId>
<dependencies>
<!– Dubbo starter –>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
注意: 父模块的dubbo-dependencies-zookeeper-curator5 已经自动把 Zookeeper + Curator 全部传递给子模块了! 子模块只要引入:
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<type>pom</type>
</dependency>
就自动拥有: Zookeeper 客户端 Curator 5 客户端 Dubbo 连接 ZK 的所有功能
3.3 新增配置文件
右击本模块(ds-provider)的resources文件夹, 选择”新建“,然后点击”文件“ 
文件名为:application.yml
参考内容如下
server:
port: 8090 # HTTP 管理端口(健康检查等)
dubbo:
application:
name: demo–provider # 服务名称,在注册中心显示
registry:
address: zookeeper://localhost:2181 # 注册中心地址
protocol:
name: dubbo
port: 20880 # Dubbo 服务端口
创建完后,项目结构如下: 
3.4 服务实现类
右击本模块(ds-provider)的java文件夹,选择”新建“,然后选择”软件包“ 
包名为:com.guo.dubbo.provier.service 
创建完后,继续右击 service文件夹,然后选择”新建“,再选择”Java类“ 
类名为:UserServiceImpl 参考代码如下:
import com.guo.dubbo.api.UserService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
@DubboService
@Component
public class UserServiceImpl implements UserService {
@Override
public String getUserInfo(String userId) {
System.out.println("[Provider] getUserInfo called, userId=" + userId);
return "Provider: user " + userId + " info from Dubbo";
}
@Override
public void updateUserAvatar(String userId, String avatarUrl) {
System.out.println("[Provider] update avatar, userId=" + userId + ", url=" + avatarUrl);
// 这里可以调用数据库更新逻辑
}
}
创建完后,项目如下: 
3.5 修改启动类
右击本模块(ds-provider)的provider文件夹,然后选择”新建“,再选择”Java类“
类名为:ProviderApplication
参考代码如下:
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
创建完后,项目结构如下:

4.dubbo-consume模块
4.1 新增模块
右击父模块,选择”新建“,然后选择”模块“ 
这里右侧选”java“,模块名为ds-consumer,构建系统选Maven, JDK选17,然后选”创建“ 
4.2 修改依赖文件
右击本模块(ds-consumer)的配置文件,增加下面的依赖。然后刷新依赖(mvn clean install)
参考依赖代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>com.guo</groupId>
<artifactId>ds-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>ds-consumer</artifactId>
<dependencies>
<!– Dubbo starter –>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
4.3 新增配置文件
右击本模块的(ds-consumer)文件夹,选择”新建“,然后选择”文件“
配置文件名为:application.yml
参考代码如下:
server:
port: 8084 # 消费者 HTTP 服务端口
dubbo:
application:
name: demo–consumer
registry:
address: zookeeper://localhost:2181
consumer:
check: false # 启动时不检查服务提供者是否存在(避免启动报错)
创建完后项目结构如下: 
4.4 新增控制器类
右击本模块(ds-consumer)文件夹,选择”新建“,然后选择”软件包“
软件包名为:com.guo.dubbo.comsumer.controller
创建完后,右击controller文件夹,选择”新建“,再选择”Java 类“。
控制器的类名为:UserController
参考代码如下:
import com.guo.dubbo.api.UserService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/user")
public class UserController {
@DubboReference
private UserService userService;
@GetMapping("/{userId}")
public String getUser(@PathVariable String userId) {
return userService.getUserInfo(userId);
}
}
创建完后,项目结构如下: 
4.5 修改启动类
右击本模块ds-consumer模块的consumer文件夹,然后选择”新建“,再选择”Java类“。
启动类名为:ConsumerApplication
参考代码如下:
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
创建完后,项目结构如下: 
5.测试
先启动生产者。
启动后,可以在控制台看到启动成功的信息。

然后再启动消费者模块。

在浏览器中输入下面的请求地址:
http://localhost:8084/api/user/123
可以看到返回下面的信息。 
同时,在生成者模块的输出,可以看到下面的信息。 
再查看一下zookeeper的注册,打开zookeeper的安装目录,进入到bin目录
双击运行zkCli.cmd 然后输入 ls /dubbo 就可以看到注册到zookeeper的信息。 
本文源代码:ds-demo4.zip链接: https://pan.baidu.com/s/1e0-roVPL0RlDUp7iT_UAVw?pwd=ymm4







