欢迎光临
我们一直在努力

分布式系统开发(4)——Dubbo+Zookeeper(RPC服务)

系列文章:


本文在前文基础上进行开发:

关于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: demoprovider # 服务名称,在注册中心显示
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: democonsumer
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

赞(0)
未经允许不得转载:171主机测评 » 分布式系统开发(4)——Dubbo+Zookeeper(RPC服务)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址