Light RPC:一款轻量高效的Java RPC框架实践指南
-
- 一、框架简介
- 二、快速入门
-
- [1. 环境准备](#1. 环境准备)
- [2. 服务端配置](#2. 服务端配置)
-
- [2.1 添加依赖](#2.1 添加依赖)
- [2.2 YAML配置](#2.2 YAML配置)
- [2.3 接口与实现](#2.3 接口与实现)
- [3. 客户端配置](#3. 客户端配置)
-
- [3.1 添加依赖](#3.1 添加依赖)
- [3.2 YAML配置](#3.2 YAML配置)
- [3.3 客户端调用](#3.3 客户端调用)
- 三、核心设计解析
- 四、适用场景与优势对比
- 五、总结
一、框架简介
Light RPC 是一款基于Java RMI构建的轻量级RPC框架,具有以下核心优势:
- 零业务入侵:无需改造现有代码结构,通过注解即可实现远程调用。
- 高性能:通信效率优于传统RESTful,适合对性能敏感的轻量级场景。
- 简单易用:避免复杂的三方组件(如Dubbo)维护成本,中小型项目的理想选择。
- Spring Boot友好:无缝集成Spring生态,配置简洁,开发效率高。
二、快速入门
1. 环境准备
克隆源码并编译:
bash
git clone git@github.com:frfsz/LightRPC.git #github https://github.com/frfsz/LightRPC.git
# git clone git@gitee.com:frfs/LightRPC.git #gitee https://gitee.com/frfs/LightRPC.git
mvn install
编译完成后,项目中按需引入服务端或客户端依赖。
提示:v2.0.2版本已发布maven中央仓库。
2. 服务端配置
2.1 添加依赖
xml
<dependency>
<groupId>io.github.frfsz</groupId>
<artifactId>light-rpc-server-starter</artifactId>
<version>2.0.2</version>
</dependency>
2.2 YAML配置
yaml
light:
rpc:
enabled: true
base-package: com.test # 关键!接口类所在包路径,需独立为JAR供客户端共用
registry:
server-port: 9000 # RPC服务监听端口
2.3 接口与实现
- 公共接口(独立JAR包)
java
package com.test.admin;
@RpcService // 标记为RPC服务接口
public interface ServerService {
void test(String name);
}
- 服务端实现
java
package com.test.service.impl;
public class ServerServiceImpl implements ServerService {
@Override
public void test(String name) {
System.out.println("服务端执行:" + name);
}
}
3. 客户端配置
3.1 添加依赖
xml
<dependency>
<groupId>io.github.frfsz</groupId>
<artifactId>light-rpc-client-starter</artifactId>
<version>2.0.2</version>
</dependency>
3.2 YAML配置
yaml
light:
rpc:
enabled: true
base-package: com.test # 与服务端相同的接口包路径
registry:
clients:
- host: 192.168.1.2 # 服务端IP
port: 9000 # 服务端端口
name:
- admin # 子包名,全路径为com.test.admin
- host: 192.168.1.1 # 支持多服务端配置
port: 9000
name:
- test # 全路径为com.test.test
3.3 客户端调用
java
package com.test.client;
@Service
public class TestClient {
@RpcClient // 自动注入远程服务代理
private ServerService serverService;
public void invokeRemote() {
serverService.test("Hello Light RPC!");
}
}
三、核心设计解析
-
接口共享机制
- 服务端与客户端通过独立JAR包共享接口,确保序列化一致性。
base-package
定义了接口的扫描范围,需与服务端严格一致。
-
多服务端路由
- 客户端可配置多个服务端实例,按子包名(
name
字段)自动路由请求。
- 客户端可配置多个服务端实例,按子包名(
-
注解驱动
@RpcService
:标记服务端接口,框架自动注册实现类。@RpcClient
:动态生成代理类,实现透明化远程调用。
四、适用场景与优势对比
场景 | Light RPC | Dubbo | RESTful |
---|---|---|---|
中小型项目 | ✅ 最佳 | ⚠️ 过重 | ✅ 适用 |
性能要求高 | ✅ 高效 | ✅ 高效 | ⚠️ 一般 |
维护成本 | ✅ 极低 | ⚠️ 较高 | ✅ 低 |
学习曲线 | ✅ 简单 | ⚠️ 复杂 | ✅ 简单 |
五、总结
Light RPC 以"轻量"为核心,通过简洁的配置和注解驱动,为中小型项目提供了高性能的RPC解决方案。它完美平衡了开发效率与运行性能,尤其适合希望避免复杂框架依赖的团队。如果你正在寻找一个"小而美"的RPC工具,Light RPC值得一试!
提示:生产环境中建议将接口JAR包托管至私有仓库,实现依赖的版本化管理。