public interface HelloService {
String sayHello(String name);
int add(int a, int b);
}
3. 实现服务
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name) {
return "Hello, " + name + "!";
}
@Override
public int add(int a, int b) {
return a + b;
}
}
4. 服务端启动
// 创建注册中心
ServiceRegistry registry = new LocalServiceRegistry();
// 创建服务端并注册服务
SocketServer server = new SocketServer(registry);
server.register(new HelloServiceImpl(), HelloService.class.getName());
// 启动服务
server.start(8888);
5. 客户端调用
// 创建注册中心(与服务端共享)
ServiceRegistry registry = new LocalServiceRegistry();
// 创建客户端
RegistryAwareClient client = new RegistryAwareClient(registry);
// 创建代理对象
HelloService helloService = RpcClientProxy.createProxy(HelloService.class, client);
// 透明调用远程方法
String result = helloService.sayHello("World"); // 返回 "Hello, World!"
int sum = helloService.add(10, 20); // 返回 30
SocketServer server = new SocketServer();
server.setUseJsonProtocol(true);
server.register(new HelloServiceImpl(), HelloService.class.getName());
server.start(8888);
序列化模块 (serialization)
支持对象与字节流的相互转换:
Serializer: 序列化器接口
JsonSerializer: JSON 序列化实现
KryoSerializer: Kryo 二进制序列化(高性能)
HessianSerializer: Hessian 二进制序列化
ProtobufSerializer: Protobuf 序列化
SerializerFactory: 序列化器工厂
SerializerType: 序列化类型枚举
性能对比:
序列化器
性能
可读性
跨语言
推荐场景
JSON
⭐⭐
⭐⭐⭐⭐⭐
⭐⭐⭐⭐
调试/日志
Kryo
⭐⭐⭐⭐⭐
⭐
⭐
生产环境
Hessian
⭐⭐⭐⭐⭐
⭐
⭐⭐⭐
生产环境
Protobuf
⭐⭐⭐⭐⭐
⭐⭐
⭐⭐⭐⭐⭐
跨语言服务
IDL与跨语言模块 (idl)
自定义IDL语言,支持跨语言服务调用:
IdlCompiler: IDL编译器主类
Lexer: 词法分析器
Parser: 语法分析器
SemanticAnalyzer: 语义分析器
JavaGenerator: Java代码生成器
PythonGenerator: Python代码生成器(生成数据模型+RPC客户端)
GoGenerator: Go代码生成器(生成数据模型+RPC客户端)
IDL示例:
namespace com.rpc.example
// 定义数据结构
struct UserInfo {
long id
string username
string email
int age
}
// 定义服务接口
service UserService {
UserInfo getUser(long userId)
UserInfo createUser(string username, string email, int age)
bool deleteUser(long userId)
list<UserInfo> listUsers(int page, int pageSize)
}
RPC Framework
一个轻量级的 Java RPC(远程过程调用)框架,支持服务注册与发现、动态代理、多种序列化方式。
特性
项目结构
快速开始
1. 添加依赖
2. 定义服务接口
3. 实现服务
4. 服务端启动
5. 客户端调用
模块说明
协议模块 (protocol)
定义 RPC 请求和响应消息格式:
RpcRequest: 封装调用请求(接口名、方法名、参数类型、参数值)RpcResponse: 封装调用结果(返回值、错误信息、状态)JsonRpcProtocol: JSON-RPC 协议实现,支持跨语言调用JSON协议格式:
启用JSON协议服务端:
序列化模块 (serialization)
支持对象与字节流的相互转换:
Serializer: 序列化器接口JsonSerializer: JSON 序列化实现KryoSerializer: Kryo 二进制序列化(高性能)HessianSerializer: Hessian 二进制序列化ProtobufSerializer: Protobuf 序列化SerializerFactory: 序列化器工厂SerializerType: 序列化类型枚举性能对比:
IDL与跨语言模块 (idl)
自定义IDL语言,支持跨语言服务调用:
IdlCompiler: IDL编译器主类Lexer: 词法分析器Parser: 语法分析器SemanticAnalyzer: 语义分析器JavaGenerator: Java代码生成器PythonGenerator: Python代码生成器(生成数据模型+RPC客户端)GoGenerator: Go代码生成器(生成数据模型+RPC客户端)IDL示例:
编译生成:
生成的跨语言客户端文件:
rpc_client.pyuser_service_client.pyrpc_client.gouser_service_client.goPython跨语言调用示例:
Go跨语言调用示例:
支持的数据类型:
int agelist<string> namesUserInfo user注册中心模块 (registry)
提供服务注册与发现功能:
ServiceRegistry: 注册中心接口LocalServiceRegistry: 本地内存注册中心(开发/测试用)NacosServiceRegistry: Nacos 注册中心(生产环境)ServiceRegistryFactory: 注册中心工厂通信模块 (transport)
处理网络通信:
RpcServer: 服务端接口SocketServer: Socket 服务端实现RpcClient: 客户端接口SocketClient: Socket 客户端实现PooledSocketClient: 连接池客户端(长连接复用)ConnectionPool: 连接池实现RegistryAwareClient: 支持服务发现的客户端代理模块 (proxy)
实现透明远程调用:
RpcClientProxy: JDK 动态代理,将本地调用转换为远程调用重试模块 (retry)
提供重试策略支持:
RetryStrategy: 重试策略接口(定义退避延迟计算)FixedRetryStrategy: 固定间隔重试ExponentialBackoffRetryStrategy: 指数退避重试RetryExecutor: 注解式重试执行器负载均衡模块 (loadbalancer)
提供多种负载均衡策略:
LoadBalancer: 负载均衡器接口LoadBalancerType: 负载均衡类型枚举LoadBalancerFactory: 负载均衡器工厂RandomLoadBalancer: 随机负载均衡RoundRobinLoadBalancer: 轮询负载均衡WeightedRoundRobinLoadBalancer: 加权轮询负载均衡策略对比:
配置模块 (config)
全局配置管理:
RpcConfig: RPC 全局配置类,支持 builder 模式配置说明
使用 Nacos 注册中心
使用多种序列化器
使用连接池
重试与超时配置
全局配置
负载均衡配置
带权重的服务注册
运行测试
文档
技术栈
许可证
MIT License