# HeartUnderBlade-RPC
**Repository Path**: peng-yu-yan-169/HeartUnderBladeRPC
## Basic Information
- **Project Name**: HeartUnderBlade-RPC
- **Description**: HeartUnderBlade-RPC 是一个基于 Java 和 Spring Boot 的 RPC 框架实现,采用 Netty 进行高性能通信,基于 Redis实现服务注册与发现。项目通过注解驱动 (@RpcService, @RpcReference),支持远程方法调用、动态代理、负载均衡、序列化(JSON、Protobuf、Hessian)和超时重试等功能。
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2025-02-16
- **Last Updated**: 2025-02-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
      
# 基本介绍
HeartUnderBlade-RPC 是一个基于 Java 和 Spring Boot 的 RPC 框架实现,采用 Netty 进行高性能通信,基于 Redis实现服务注册与发现。项目通过注解驱动 (@RpcService, @RpcReference),支持远程方法调用、动态代理、负载均衡、序列化(JSON、Protobuf、Hessian)和超时重试等功能。
# 项目结构
```xml
HeartUnderBladeRPC/
│
├── heartunderblade-rpc-springboot-starter # 基于 HeartUnderBladeRPC 的 Spring Boot 启动器
│
├── sample-springboot-consumer/ # 基于 `heartunderblade-rpc-springboot-starter` 的消费者模块
│
├── sample-springboot-provider/ # 基于 `heartunderblade-rpc-springboot-starter` 的提供者模块
│
├── simple-consumer/ # 轻量级消费者模块
│
├── simple-provider/ # 轻量级提供者模块
│
├── heartunderblade-rpc-core/ # 框架的核心模块,提供多项功能
│
├── heartunderblade-rpc-easy/ # 轻量级框架,仅支持本地服务注册与发现
│
├── sample-common/ # 公共工具类或共享模型
│
└── pom.xml # Maven 构建文件
```
# 快速开始
### 1.修改注册中心
请先修改heartunderblade-rpc-core中redis地址,请确保redis已启动
```java
@Data
public class RegistryConfig {
/**
* 注册中心类别
*/
private String registry = "redis";
/**
* 注册中心地址
*/
private String address = "http://192.168.101.128:6379";
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 超时时间(单位毫秒)
*/
private Long timeout = 10000L;
}
```
### 2.创建共享包
在配置 Provider 和 Consumer 之前,首先创建一个共享模块,该模块包含通用实体(User)和服务接口(UserService)。这个共享包将在 Provider 和 Consumer 之间复用。
定义共享实体和服务接口
```java
// User.java
public class User {
private String name;
public User(String name) {
this.name = name;
}
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
// UserService.java
public interface UserService {
User getUser(User user);
}
```
打包并发布到本地 Maven 仓库
创建共享模块后,将其打包为 JAR 文件,并发布到本地 Maven 仓库,以便 Provider 和 Consumer 都能使用它。
```she
# 将共享模块安装到本地 Maven 仓库
mvn clean install
```
### 3.导入依赖
创建 **服务提供者(Service Provider)** 和 **服务消费者(Service Consumer)** 模块,并在 `pom.xml` 或 `build.gradle` 文件中添加必要的依赖项。
```xml
com.heartunderblade
starter
0.0.1-SNAPSHOT
{common-package-name}
exp-common
1.0-SNAPSHOT
```
### 4.配置服务提供者(Provider)
创建 **Spring Boot 服务提供者** 应用,并在主类上使用 `@EnableRpc` 注解,启用 RPC 服务功能。
```java
@SpringBootApplication
@EnableRpc
public class ExampleSpringbootProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ExampleSpringbootProviderApplication.class, args);
}
}
```
**实现 `UserService` 接口**,并提供远程调用的方法:
```java
@Service
public class UserServiceImpl implements UserService {
@Override
public User getUser(User user) {
user.setName("Hello, " + user.getName());
return user;
}
}
```
### 5.配置服务消费者(Consumer)
创建 **Spring Boot 服务消费者** 应用,并在主类上使用 `@EnableRpc`,并设置 `needServer = false`,表明这是一个仅作为客户端的 Consumer。
```java
@SpringBootApplication
@EnableRpc(needServer = false)
public class ExampleSpringbootConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ExampleSpringbootConsumerApplication.class, args);
}
}
```
### 6.注入远程服务代理
使用 `@RpcReference` 注解,将远程服务代理注入 Bean 中,框架会自动创建 `UserService` 的代理对象,并处理底层 RPC 通信。
```java
/**
* @description: 注入 Spring 容器的 Bean 类。
* `@Reference` 让框架自动创建 `UserService` 的代理对象,透明地处理 RPC 调用。
*/
@Service
@Slf4j
public class ExampleServiceImpl {
@RpcReference
private UserService userService;
public void testUserService() {
log.info("UserService 代理类型: {}", userService.getClass().getSimpleName());
User user = new User("heartunderblade");
User ans = userService.getUser(user);
System.out.println(ans.getName());
}
}
```
### 7.测试服务消费者
创建一个测试类,验证 `UserService` 代理是否能正确工作。测试方法 `testUserService()` 将透明地调用远程 RPC 服务。
```java
public class ExampleServiceImplTest {
@Resource
private ExampleServiceImpl exampleService;
@Test
public void testUserService() {
exampleService.testUserService();
}
}
```
### 8.总结
**服务提供者(Provider)**:使用 `@EnableRpc` 启用 RPC 并实现 `UserService` 业务逻辑。
**服务消费者(Consumer)**:使用 `@EnableRPC` 并通过 `@RPCReference` 注入远程服务代理。
**透明的 RPC 机制**:框架自动处理底层通信和序列化,使开发者专注于业务逻辑,而无需关心 RPC 细节。
# 项目架构图
1.简化基础RPC框架结构

2.RPC框架的关键功能

3.定制化设计协议结构

4.定制化协议的解码与编码
