# airy-rpc
**Repository Path**: hadwinling/airy-rpc
## Basic Information
- **Project Name**: airy-rpc
- **Description**: No description available
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-12-14
- **Last Updated**: 2026-01-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# airy-rpc




#### 介绍
Airy-RPC 是一款基于Netty开发的高性能、轻量级RPC框架,专注于提供简洁易用、可灵活扩展的远程服务调用能力。框架采用 SPI 机制实现注册中心、序列化器等核心组件的可插拔扩展,支持 Spring 生态整合与原生 Java 环境部署,适用于微服务架构中的跨服务通信场景。
##### 核心特性
- 高性能通信:基于Netty实现网络通讯,序列化协议(JSON/Protobuf/Hessian)
- 灵活扩展:通过SPI机制适配多种注册中心(默认支持 Nacos/Zookeeper/Eureka)
- 服务治理:支持服务注册与发现、负载均衡(轮询 / 随机 / 权重)、超时重试、服务熔断降级
- 易用性设计:注解驱动(@EnableRpc/@RpcService/@RpcReference...)和原生API两种使用方式
- 多环境适配:支持纯Java环境、Spring环境下使用
- 可靠性保障:通过SPI机制适配熔断降级限流组件,限流、异常熔断机制,确保服务稳定性
- 轻量依赖少:核心依赖少、SPI机制允许按需引入功能模块
#### 软件架构
Airy-RPC 采用分层设计思想,从上到下分为接入层、核心层、基础设施层,各层职责清晰
~~~plaintext
─────────────────────────────────────────────────────────
环境接入层(rpc-adapter)
├─ rpc-adapter-spring:Spring 生态适配(注解驱动、自动配置)
├─ rpc-adapter-quarkus: Quarkus 生态适配(下个版本)
└─ 原生 API 接入:无 Spring 环境支持
─────────────────────────────────────────────────────────
核心层(rpc-core)
├─ 服务暴露:ServiceProvider、ServiceDiscovery、ServiceRegistry三大核心组件
├─ 服务引用:RpcServiceProxyFactory 负责动态代理与远程调用
├─ 协议层:自定义 RPC 协议(消息头+序列化数据)
├─ 网络通信:基于 Netty 的客户端/服务端实现
├─ 序列化:接口适配多种序列化方式(JSON、MsgPack、JDK原生、Protobuf...)
└─ 负载均衡:提供多种负载均衡策略实现
─────────────────────────────────────────────────────────
注册中心适配(rpc-registry)
├─ rpc-registry-spi:注册中心 SPI 抽象接口
├─ rpc-registry-springcloud:所有基于SpringCloud协议的注册中心(Nacos/Consul/Eureka...)
├─ rpc-registry-redis:适配redis
├─ rpc-registry-zookeeper:适配zookeeper
├─ rpc-registry-etcd:适配etcd
─────────────────────────────────────────────────────────
熔断降级适配(rpc-degrade)
├─ rpc-filter-spi:过滤器 SPI 抽象接口
├─ rpc-degrade-hystrix:接入hystrix
├─ rpc-degrade-resilience4j:接入resilience4j
├─ rpc-degrade-sentinel:接入sentinel
─────────────────────────────────────────────────────────
~~~
##### 核心组件说明
| 组件模块 | 核心职责 |
| ---- | ---- |
| rpc-common | 基础公共包 |
| rpc-core | 框架核心逻辑,包含服务暴露 / 引用、协议解析、序列化、负载均衡等核心功能 |
| rpc-registry-spi | 注册中心 SPI 抽象,定义注册中心的核心接口(注册 / 发现 / 注销) |
| rpc-registry | 注册中心具体实现,已内置支持 Nacos/Eureka/Consul/Zookeeper/Etcd/Redis |
| rpc-filter-spi | 过滤器 SPI 抽象,定义过滤器链的过滤器,可以利用过滤器拓展 |
| rpc-degrade | 熔断降级适配,已内置支持 Sentinel/Resilience4j/Hystrix |
| rpc-adapter-spring | Spring 生态适配,提供注解驱动、自动配置等功能,快速集成Spring |
| rpc-samples-spring | SpringCloud 环境示例项目,包含服务端 / 客户端完整使用示例 |
| rpc-samples-java | 纯 Java 环境示例项目(演示无 Spring 依赖的使用方式) |
#### 快速开始
##### 环境要求
- JDK 8+
- Maven 3.6+
- 注册中心(可选,支持 Nacos 2.x/Zookeeper 3.5+/Eureka 1.x)
##### 引入依赖
1.核心依赖
~~~xml
org.openbyte
rpc-core
${lastVersion}
~~~
2.注册中心适配
~~~xml
org.openbyte
rpc-adapter-spring
${lastVersion}
org.openbyte
rpc-registry-spring-cloud
${lastVersion}
org.openbyte
rpc-registry-zookeeper
${lastVersion}
org.openbyte
rpc-registry-redis
${lastVersion}
org.openbyte
rpc-registry-etcd
${lastVersion}
~~~
3.熔断降级适配
~~~xml
org.openbyte
rpc-degrade-hystrix
${lastVersion}
org.openbyte
rpc-degrade-resilience4j
${lastVersion}
org.openbyte
rpc-degrade-sentinel
${lastVersion}
~~~
##### 在SpringCloud环境下使用
参考示例:rpc-samples-java
##### 纯Java环境下使用
参考示例:rpc-samples-spring
#### 高级特性
##### 1.负载均衡策略
框架支持多种负载均衡策略,可通过多种方式指定
- 通过注解@RpcService属性loadBalance来指定,一般用来针对某类特殊需求
~~~java
/**
* 模拟调用的业务类
*/
@RpcService(loadBalance = LoadBalanceStrategy.LEAST_ACCESS_RECENTLY)
public interface MockService {
String getMockValue(String key);
}
~~~
- 通过配置文件,配置全局默认的负载均衡算法
~~~yaml
rpc:
load-balance: round_robin #负载均衡策略
~~~
##### 2.数据序列化
通过自定义注入DataSerializer可实现数据序列化的替换
- Spring环境
~~~java
@Bean
public DataSerializer dataSerializer() {
return new XxxPackDataSerializer();
}
~~~
- 纯Java环境
~~~java
DataSerializer myDataSerializer = new XxxPackDataSerializer();
RpcContext rpcContext = new RpcContext(17071, basePackages, LoadBalanceStrategy.ROUND_ROBIN,
myDataSerializer, InstanceContainerFactory.defaultContainer(), RegistryConfig.redisConfig());
~~~
##### 3.服务熔断与降级
通过注解配置服务熔断参数,避免服务雪崩
待补充
##### 4.自定义注册中心(SPI 扩展)
通过 SPI 机制扩展自定义注册中心,只需三步:
1. 引入rpc-registry-spi依赖
~~~xml
org.openbyte
rpc-registry-spi
${lastVersion}
~~~
2.实现 ServiceDiscovery 和 ServiceRegistry 两个SPI接口
~~~java
public class SpringCloudServiceDiscovery implements ServiceDiscovery {
// 实现 ...
}
public class SpringCloudServiceRegistry implements ServiceRegistry {
// 实现 ...
}
~~~
3.编写配置文件
在resources目录下,META-INF/services,基于JavaSPI规范编写
- 文件名:SPI全路径
- 文件内容:实现类全路径
具体可参考 rpc-registry-springcloud的实现
最后必须将spi的包导入到项目类路径下,spi才会被加载!
##### 5.自定义过滤器(插件)(SPI 扩展)
通过 SPI 机制扩展自定义过滤器,只需三步:
1. 引入rpc-filter-spi依赖
~~~xml
org.openbyte
rpc-filter-spi
${lastVersion}
~~~
2.实现 RpcFilter SPI接口
~~~java
public class MyRpcFilter implements RpcFilter {
// 实现 ...
}
~~~
3.编写配置文件
在resources目录下,META-INF/services,基于JavaSPI规范编写
- 文件名:SPI全路径
- 文件内容:实现类全路径
具体可参考 rpc-degrade-hystrix的实现
最后必须将spi的包导入到项目类路径下,spi才会被加载!
#### 性能测试
基础性能指标(单节点测试环境)
| 测试场景 | 并发数 | 平均响应时间 | QPS 峰值 | 成功率 |
| ---- | ---- | ---- | ---- | ---- |
| 简单字符串传输(100B) | 1000 | 1.2ms | 83000+ | 99.99% |
测试环境
CPU:Intel i5-13400H(12 核 16 线程)
内存:32GB DDR5 4800MHz
网络:本地环路(1Gbps)
JDK:1.8.0_381
注册中心:Eureka
#### 参与贡献
1.Fork 本仓库(点击仓库右上角 Fork 按钮)
2.新建分支(git checkout -b Feat/xxx,如 Feat/add-zookeeper-registry)
3.提交代码(git commit -m "feat: 新增 Zookeeper 注册中心支持")
4.推送分支(git push origin Feat/xxx)
5.新建 Pull Request(在 Gitee 仓库页面提交 PR,描述功能细节)
##### 贡献代码规范
- 代码风格遵循 Google Java 编码规范
- 新增功能需配套单元测试(覆盖率≥80%)
- 提交信息格式:type: 描述(type 可选:feat/fix/docs/style/refactor/test/chore)
- 新增核心功能需先提交 Issue 讨论,达成共识后再开发
#### 许可证
本项目基于 Apache License 2.0 开源协议,详情请查看 LICENSE 文件。
#### 联系与反馈
- 项目地址:https://gitee.com/open-byte/airy-rpc
- Issue 反馈:提交问题
- 开发交流:欢迎通过 Gitee 仓库留言或提交 PR 交流想法