Small-RPC 是一款基于 Netty + Hessian + Redis(注册中心) 的精简版 RPC 框架,专为学习和理解 RPC 原理而设计。
- 🚀 高性能: 基于 Netty NIO 框架
- 🔄 序列化: 支持 Hessian 高效序列化
- 🔧 Spring 集成: 完美集成 Spring 生态
- 💡 简单易用: 注解驱动的开发方式
- 🛡️ 资源管理: 优化的线程池和连接管理
- 📊 监控友好: 可观测的线程命名和错误处理
- Netty: 4.1.39 → 4.1.108 (最新稳定版)
- Spring: 4.3.24 → 5.3.39 (安全更新)
- Spring Boot: 1.5.22 → 2.7.18 (LTS 版本)
- Maven 插件: 更新至最新版本
- Redis: 注册中心
- 线程池增强: 更好的命名和监控能力
- 资源管理: 优雅关闭和超时控制
- 连接优化: 更好的连接池管理和错误处理
- Netty 配置: 优化的 socket 选项设置
- 错误处理: 全面的异常处理和恢复机制
- 资源清理: 自动资源清理和内存泄漏防护
- 参数验证: 严格的输入参数验证
- 日志改进: 更详细的调试信息
small-rpc
├── small-rpc-core -- 核心模块
├── small-rpc-simple -- Spring Boot 示例
│ ├── small-rpc-sample-springboot-api -- 接口 API JAR
│ ├── small-rpc-sample-springboot-client -- 调用方示例
│ └── small-rpc-sample-springboot-server -- 服务提供方示例
mvn clean package<dependency>
<groupId>io.github.upowerman</groupId>
<artifactId>small-rpc-core</artifactId>
<version>1.0.0</version>
</dependency>@Configuration
public class RpcProviderConfig {
private Logger logger = LoggerFactory.getLogger(RpcProviderConfig.class);
// Netty 端口
@Value("${small-rpc.provider.port}")
private int port;
@Bean
public RpcSpringProviderFactory rpcSpringProviderFactory() {
// 核心类 获取服务提供类 启动 Netty
RpcSpringProviderFactory providerFactory = new RpcSpringProviderFactory();
providerFactory.setPort(port);
providerFactory.setCorePoolSize(10);
providerFactory.setMaxPoolSize(20);
providerFactory.setServiceRegistryClass(LocalServiceRegistry.class);
providerFactory.setServiceRegistryParam(Collections.EMPTY_MAP);
return providerFactory;
}
}@Configuration
public class RpcInvokerConfig {
private Logger logger = LoggerFactory.getLogger(RpcInvokerConfig.class);
// 指定提供方地址
@Value("${small-rpc.registry.address}")
private String address;
@Bean
public RpcSpringInvokerFactory rpcInvokerFactory() {
RpcSpringInvokerFactory invokerFactory = new RpcSpringInvokerFactory();
invokerFactory.setServiceRegistryClass(LocalServiceRegistry.class);
HashMap<String, String> params = new HashMap<>();
// 指定提供方地址
params.put(LocalServiceRegistry.DIRECT_ADDRESS, address);
invokerFactory.setServiceRegistryParam(params);
return invokerFactory;
}
}服务类需要使用 @RpcService 注解(服务必须在 IoC 容器中):
@Service
@RpcService
public class HelloServiceImpl implements HelloService {
@Override
public HelloDTO hello(String name) {
return new HelloDTO("Hello " + name);
}
}消费方使用 @RpcReference 注解进行服务引用:
@RestController
@RequestMapping("/")
public class HelloController {
@RpcReference
private HelloService helloService;
@GetMapping("/hello")
public HelloDTO hello(String name) {
return helloService.hello(name);
}
}# 核心线程数
small-rpc.provider.core-pool-size=10
# 最大线程数
small-rpc.provider.max-pool-size=20
# 服务端口
small-rpc.provider.port=8080# 服务注册地址
small-rpc.registry.address=localhost:8080
# 连接超时时间
small-rpc.connect.timeout=10000- 启动服务提供方:
cd small-rpc-simple/small-rpc-sample-springboot-server
mvn spring-boot:run- 启动服务消费方:
cd small-rpc-simple/small-rpc-sample-springboot-client
mvn spring-boot:run- 访问测试接口:
curl http://localhost:8081/hello?name=World- 🔧 依赖版本全面更新至稳定版本
- ⚡ 性能优化:线程池、连接管理、资源清理
- 🛡️ 增强错误处理和参数验证
- 📊 改进日志和监控能力
- 🔧 修复跨平台兼容性问题
- 基础 RPC 功能实现
- Netty + Hessian 技术栈
- Spring 集成支持
本项目基于 Apache License 2.0 开源协议。
欢迎提交 Issue 和 Pull Request 来改进项目!
- Fork 项目
- 创建特性分支
- 提交变更
- 推送到分支
- 创建 Pull Request
