# fuyun-rpc-spring-boot
**Repository Path**: zrq1351/fuyun-rpc-spring-boot
## Basic Information
- **Project Name**: fuyun-rpc-spring-boot
- **Description**: fuyun-rpc springboot版本
FuYuan RPC 是一个高性能、易扩展的远程过程调用框架,旨在简化分布式系统中的服务通信。它支持多种传输协议和序列化方式,适用于各种规模的应用场景。
- **Primary Language**: Unknown
- **License**: WTFPL
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-02-20
- **Last Updated**: 2025-02-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: rpc, SpringBoot, etcd, 分布式
## README
# FuYuan RPC 项目介绍
FuYuan RPC 是一个高性能、易扩展的远程过程调用框架,旨在简化分布式系统中的服务通信。它支持多种传输协议和序列化方式,适用于各种规模的应用场景。
## 主要特性
- 高性能:采用高效的网络通信机制,确保低延迟和高吞吐量。
- 易扩展:支持插件化扩展,可以根据需求轻松集成新的功能。
- 多种协议支持:支持多种传输协议,如 TCP、HTTP 等。
- 灵活的序列化:支持多种序列化方式,如 JSON、Protobuf 等。
## 当前版本
- 版本号:1.0-SNAPSHOT
## 主要更新:
- 初始版本,包含核心功能和基础架构。
- 添加 全局配置文件
- 支持 消费者使用模拟数据
- 支持 Hessian、Kryo 和 JSON 序列化
- 支持 自定义序列化方案
- 重构 ConfigUtils 类,支持加载 YAML YML 配置文件 优先级 本包>模块>jar properties>yml>yaml
- 新增 MockDataUtil 类,用于生成模拟数据
- 更新 MockDataGeneratorProxy,使用新的 MockDataUtil 类
- 支持 服务提供者返回模拟数据
- 支持 注册中心实现服务发现和注册 内置Etcd
- 支持 支持自定义注册中心
- 添加 负载均衡基础实现(一致性 Hash, 随机,轮询)
- 支持 自定义负载均衡算法
- 添加 重试策略
- 支持 自定义重试策略
- 添加 添加容错策略(快速失败,静默,故障转移)
- 支持 自定义容错策略
- springboot 项目化改造
## 使用方式
### 服务端(服务提供者)
- 引入依赖
```xml
com.fuyun.rpc
fuyun-rpc-server-spring-boot-starter
1.0-SNAPSHOT
```
- 在springboot项目启动类上添加注解[@EnableFuyunServerRpc](fuyun-rpc-server-spring-boot-autoconfigure/src/main/java/com/fuyun/rpc/server/annotations/EnableFuyunServerRpc.java)
~~~java
@SpringBootApplication
@EnableFuyunServerRpc
public class ServerSpringApplication {
public static void main(String[] args) {
SpringApplication.run(ServerSpringApplication.class, args);
}
}
~~~
- 在服务提供类上加上 [@FuyunRpcService](fuyun-rpc-server-spring-boot-autoconfigure/src/main/java/com/fuyun/rpc/server/annotations/FuyunRpcService.java)
~~~java
/**
* FuyunRpcService
* 不配置serviceVersion与group ,则默认使用配置文件配置的serviceVersion与group
*/
@FuyunRpcService(value = ClazzService.class,serviceVersion = "1.0")
@Service
public class ClazzServiceImpl implements ClazzService {
@Override
public Clazz getClazz(Integer id) {
return new Clazz(id, "三年级一班");
}
}
@FuyunRpcService(value = UserService.class)
@Service
public class UserServiceImpl implements UserService {
@Override
public String getUserName(User user) {
return user.getName();
}
@Override
public User getUser() {
User user = new User();
user.setName("zrq");
user.setAge(18.0);
user.setList(null);
user.setMap(null);
return user;
}
}
~~~
### 客户端(服务消费者)
- 引入依赖
```xml
com.fuyun.rpc
fuyun-rpc-client-spring-boot-starter
1.0-SNAPSHOT
```
- 在字段上添加注解[@FuyunRpcAutowired](fuyun-rpc-client-spring-boot-autoconfigure/src/main/java/com/fuyun/rpc/client/annotations/FuyunRpcAutowired.java)
,在方法中正常使用即可
~~~java
@SpringBootTest(classes = {FuyunRpcClientAutoConfigure.class})
class FuyunExampleConsumerApplicationTests {
/**
* FuyunRpcAutowired
* 不配置serviceVersion与serviceGroup等,则默认使用配置文件配置的serviceVersion与group
* 确保与服务端配置的serviceVersion与group一致
*/
@FuyunRpcAutowired(serviceVersion = "1.0")
private ClazzService clazzService;
@FuyunRpcAutowired(serviceVersion = "2.0")
private UserService userService;
@Test
void testGetClazzNotNull() {
Clazz clazz = clazzService.getClazz(1);
Assert.notNull(clazz, "获取班级信息失败");
System.out.println(clazz);
}
@Test
void testGetUserNameNotNull() {
User user = userService.getUser();
Assert.notNull(user, "获取用户失败");
System.out.println(user);
}
}
~~~
### 模拟调用
- 返回是自定义对象时 确保存在无参构造器