# 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 ![项目架构图](docs/images/java.svg "项目架构图") ![项目架构图](docs/images/netty.svg "项目架构图") ![项目架构图](docs/images/spi.svg "项目架构图") ![项目架构图](docs/images/apache2.0.svg "项目架构图") #### 介绍 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 交流想法