【个人项目】基于 Netty,Nacos 的 RPC 框架的实现

yuanlin-rpc-framework 是一个基于 Netty 和 Nacos 的 Java RPC 框架,具备多种序列化方式和负载均衡策略。框架包括网络传输、服务发布和调用模块,支持 ZooKeeper 和 Nacos 作为注册中心。服务提供者通过 Spring 注解自动注册,客户端通过动态代理调用服务。
摘要由CSDN通过智能技术生成

附上 github 地址: https://github.com/yuanlin-repository/yuanlin-rpc-framework

yuanlin-rpc-framework

yuanlin-rpc-framework 是一款基于 Netty 实现的 RPC 框架,框架主要分为网络传输、服务发布、服务调用三个部分,实现了多种序列化方法和负载均衡策略,注册中心支持 ZooKeeper 和 Nacos。

架构

RPC架构
服务提供者(server)向注册中心(registry)注册服务,服务消费者(client)通过注册中心获取服务地址,再通过网络向服务提供者发起服务调用请求。

特性

通用

  • 良好的接口抽象,详细的中文注释,单元测试
  • 实现 4 种序列化方式(Hessian、Kryo、Protostuff、Json)
  • 实现 3 种负载均衡策略(一致性哈希、轮询、随机)
  • 支持 ZooKepper 和 Nacos 两种注册中心

网络传输模块

  • 通过 Netty(NIO)实现网络传输
  • 添加 Netty 心跳机制
  • 自定义通信协议(可扩展且向后兼容)
  • 消费端可以复用 Channel,避免多次连接

服务发布模块(Server 端)

  • 通过 Spring + 注解的方式实现服务自动注册
  • 优雅启动,当 spring 容器初始化完成之后再向注册中心发布服务(延迟发布)
  • 优雅关闭,当服务器关闭时清理注册的服务

服务调用模块(Client 端)

  • 通过 Spring + 注解的方式实现服务消费
  • 动态代理屏蔽网络通信细节

项目模块概览

  • demo-api: 示例-服务接口
  • demo-client: 示例-客户端
  • demo-server: 示例-服务端
  • rpc-common: RPC 框架通用模块,包含枚举,异常,工具类等
  • rpc-core: RPC 框架核心模块,包含客户端,服务端,网络通信模块实现

传输协议

使用 Netty 进行传输时使用了如下传输协议:
未命名文件
字段解释:

名称 长度 (byte) 描述
魔数 4 标识协议包,类似与 Java 字节码文件开头的四个字节 0xcafebabe
整体长度 4 整个协议包的长度
头长度 2 协议包头部长度
协议版本 1 当前协议的版本
消息类型 1 当前协议包是一个请求、响应还是心跳包
序列化方式 1 序列化 payload 采用的方式
请求id 4 当前协议包的id
协议头扩展字段 不确定 如果协议版本升级,可能会新增字段,这些字段就在此处
payload 不确定 协议包数据主体

使用说明

当前版本: v1.0

定义 RPC 接口

参见 demo-api 模块

package github.yuanlin;

public interface HiService {
   

    /**
     * hi方法
     * @return hi msg
     */
    String hi(String msg);
}

需要将 RPC 接口与 RPC 实现分别存放在不同的模块中

发布 RPC 服务

参见 demo-server 模块

第一步:添加 Maven 依赖
<!-- rpc-core -->
<dependency>
    <groupId>github.yuanlin</groupId>
    <artifactId>rpc-core</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<!-- demo-api -->
<dependency>
    <groupId>github.yuanlin</groupId>
    <artifactId>demo-api
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值