Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

WRCoding/nrpc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

21 Commits

Repository files navigation

NRPC

image

Nrpc

Nrpc,是一个类似dubbo的简易RPC框架,实现了服务注册,负载均衡和重连服务等功能,可以仅通过注解就可以调用远程服务

功能介绍

Nrpc的核心是Nrpc-core,所有实现都在这里面

基础需要有个对外提供服务的接口类,同时服务实现了该接口类,该项目事例中提供了一个对外的接口

image.png

注解@EnableNrpc

@EnableNrpc注解用在客户端中,标明启用Nrpc

image.png

注解@NService

@Nservice注解用在了对外提供服务的接口实现类中,表明该类可以对外提供服务,可以远程调用给类。注解有个必填的属性ServiceName,来唯一标明当前服务

image.png

image.png

在服务启动后,Nrpc会自动发现使用该注解的类,根据serviceName将其注册到Zookeeper中,并启动Netty,等待服务调用

image.png

注解@Ncall

@Ncall注解用于客户端远程调用中,该注解的作用类似于dubbo的@Reference,当客户端使用远程调用某个服务的接口时,只需要引用该服务提供的接口,加上该注解,然后写上远程的服务的ServiceName。就可以像调用本地方法一样,调用远程服务的接口

image.png

image.png

image.png

SPI

在写这个项目的时候,通过SPI使用插件扩展,可以扩展注册中心,路由处理器,序列化方式,这些都有默认实现,也可以通过插件自定义实现,SPI没有用Java默认的,而是选择了跟dubbo一样的实现方式,通过key-value的方式来加载

image.png

注册中心

注册中心使用的是zookeeper,也可以拓展实现Redis,Nacos等,每个带有 @NService的类,在服务启动的时候,都会把相关数据生成path,然后在zookeeper创建成临时节点

image.png

代理

注解 @Ncall 在注入接口类的时候,实际注入的是该接口的代理类,通过代理类向远程服务发起方法调用,对外屏蔽了细节

image.png 实现代理的方式有JDK和Cglib,默认使用JDK

image.png

image.png

序列化

目前仅仅实现了JSON方式的序列化,可以拓展实现protobuf,kyro等方式的序列化

image.png

路由处理

当一个远程服务是集群模式,有多台服务器时,可通过路由处理器来选取其中一台,目前有轮训和随机获取,可以拓展其他方法,比如一致性哈希等,默认使用随机获取

image.png

image.png

心跳检测/重连

Nrpc实现了心跳检测和重连功能,心跳检测确认调用方和被调用方的连接状态。重连功能让调用方在连接的远程服务挂了后,在一定时间内重新寻找可用的服务器进行连接。

image.png

image.png

About

NRPC: Netty实现的简易RPC框架

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /