# mini-rpc **Repository Path**: frsf/mini-rpc ## Basic Information - **Project Name**: mini-rpc - **Description**: 基于 Netty + 自定义协议 实现的 MINI RPC服务器 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-01 - **Last Updated**: 2025-10-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mini-rpc-spring-boot-starter 一个轻量级的 RPC 框架 Spring Boot Starter,简化 RPC 客户端与服务端的集成与使用。 ## 特性 - 快速集成:通过简单的注解实现 RPC 客户端与服务端的自动装配。 - 高性能通信:基于 Netty 实现高性能网络传输。 - 服务自动注册与发现:结合 Spring Boot 自动化配置,服务端与客户端无需手动管理连接。 - 支持多种序列化方式:JSON、Protobuf、Kryo 等。 - 完善的协议设计:具备魔数、版本、状态、请求 ID 等字段,确保通信稳定性。 ## 主要组件 - `@EnableRpcClient` 和 `@EnableRpcServer`:启用 RPC 客户端或服务端功能。 - `RpcClientConfig` 和 `RpcServerConfig`:配置 RPC 客户端与服务端的核心组件。 - `RpcProperties`:配置文件中用于设置 RPC 客户端与服务端的属性。 - `RpcMessageDecoder` 和 `RpcMessageEncoder`:处理通信协议的编解码。 - `NettyRpcClient` 和 `NettyRpcServer`:基于 Netty 的 RPC 客户端与服务端实现。 - `RpcReferenceBeanPostProcessor`:自动创建远程调用代理。 - `RpcServiceInvokeHandler`:处理服务端的 RPC 请求调用。 - `RpcResponseHandler`:处理客户端的响应并完成异步结果。 ## 使用方法 ### 服务端 1. 在 Spring Boot 应用中添加 `@EnableRpcServer` 注解。 2. 使用 `@RpcService` 注解标记需要暴露的 RPC 服务类。 3. 配置 `application.yml` 中的 `rpc.server.port` 设置服务监听端口。 示例: ```java @EnableRpcServer @SpringBootApplication public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } } @RpcService public class UserServiceImpl implements UserService { @Override public User getUser() { return new User("Alice", 30); } } ``` ### 客户端 1. 在 Spring Boot 应用中添加 `@EnableRpcClient` 注解。 2. 使用 `@RpcReference` 注解注入远程服务。 3. 配置 `application.yml` 中的 `rpc.client.host` 和 `rpc.client.port`。 示例: ```java @EnableRpcClient @SpringBootApplication public class ConsumerApplication { public static void main(String[] args) throws Exception { SpringApplication.run(ConsumerApplication.class, args); } } @Service public class TestService { @RpcReference private UserService userService; public void test() { User user = userService.getUser(); System.out.println("Received user: " + user.getName() + ", " + user.getAge()); } } ``` ## 配置说明 在 `application.yml` 中进行如下配置: ### 服务端配置 ```yaml rpc: server: port: 8080 ``` ### 客户端配置 ```yaml rpc: client: host: 127.0.0.1 port: 8080 ``` ## 协议结构 - **RpcHeader**: 包含 magic、version、flags、serialType、status、requestId、bodyLength。 - **RpcMessage**: 封装 RpcHeader 与 RpcReqBody 或 RpcRespBody。 - **RpcReqBody**: 请求内容,包括服务名、接口、方法名、参数等。 - **RpcRespBody**: 响应内容,包含结果、错误信息等。 ## 序列化支持 支持以下序列化方式: - JSON - Protobuf - Kryo ## 贡献 欢迎提交 PR 或 Issue,一起完善这个轻量级 RPC Starter。