基于netty实现类似dubbo的rpc中间件

easyRpc

类似dubbo,easyRpc的功能是面向接口的远程方法调用。可集群容错。设计上模仿dubbo,实际上跟dubbo比起来就是🌶️🌶️🌶️🌶️🐔。仅用于学习交流。

概念

  1. 消息提供者(provider),服务提供者,将服务暴露并注册到注册中心。可集群
  2. 注册中心(register),管理服务提供者提供的服务,具有负载均衡的功能(仅仅有随机策略),将服务暴露给消费者。
  3. 消费者(consumer),通过注册中心找到服务提供者再进行调用。

如何使用

注册中心启动:

注意:注册中心一定要先于生产者启动,否则服务无法注册到注册中心。

注册中心:jar包 提取码: pyr8
下载后执行命令

 java -jar easyregister-1.0-SNAPSHOT.jar

默认占用端口号20888,心跳最大间隔时间为30(30无心跳服务将被注册中心下线)。如需指定

 java -jar easyregister-1.0-SNAPSHOT.jar 端口号 心跳最大间隔时间

也可以不下载jar包,直接将源码克隆到本地,运行main方法即可
在这里插入图片描述
项目启动:
需要maven,springboot。

  1. 由于easyRpc并不在maven公服上,第一步需要将 源码down下来利用idea或者在项目根目录执行mvn install打jar包到本地仓库。打包后直接在需要使用的项目中依赖即可
    在这里插入图片描述
  <dependency>
            <artifactId>easyrpc-starter</artifactId>
            <groupId>com.lxs</groupId>
            <version>1.0-SNAPSHOT</version>
  </dependency>

若需要使用,依赖easyRpc的starter模块,
启动easyRpc需要在springBoot启动类加上注解@EasyRpcEnable

生产者配置:

#扫描包路径,用于服务提供者服务暴露,消费者引入服务
easyrpc.basePackage=com.rpctest.test
#注册中心端口
easyrpc.registerPort=20888  
#注册中心ip
easyrpc.registerIp=127.0.0.1

#服务提供者占用端口,如不配置,则不会提供服务
easyrpc.port=20222

#20秒发送一个心跳包通知注册中心自己在线,若不配置,默认15
easyrpc.heartBeatTime=20

在需要暴露服务的类加上@RpcProd注解。
在这里插入图片描述

消费者配置:

#扫描包路径,用于服务提供者服务暴露,消费者引入服务
easyrpc.basePackage=com.rpctest.test
#注册中心端口
easyrpc.registerPort=20888  
#注册中心ip
easyrpc.registerIp=127.0.0.1

服务提供模块需要配置,easyrpc.port用于提供服务给消费者,如果一个模块纯消费就不必配置
服务引入:
在这里插入图片描述
如需引用服务,需要在字段上加上 @RpcConsumer(timeout = 10,retryTime = 3),其中timeout为请求超时时间(不配置默认为5),retrytime为重试次数(默认为3)。此注解标识含义是,若10秒无返回则重试,重试3次均无返回则认为接口调用超时。

生产者消费者的使用demo

demo地址
启动此demo需要按照前面的教程easyRpc打包到本地仓库,并且启动注册中心。
注意:demo中配置的注册中心ip和端口号需要与注册中心一致。
本demo中有两个provider和consumer,两个provider注册到一个注册中心集群,分别启动这三个模块就可以调用了
在这里插入图片描述

访问 http://localhost:8866/index
消费者会调用服务提供者的服务并返回结果
在这里插入图片描述

性能测试

以下测试均在无业务处理的情况下,仅仅走通链路
单次调用耗时

jmeter压力测试
在这里插入图片描述
在这里插入图片描述
由于注册中心,服务提供者,消费者均在一台电脑上,性能测试意义不大。

总结

easyRpc可以实现简单的分布式调用,异常抛出,生产者集群,使用netty异步可以做到高并发。但是实际生产用途不大,
仅仅用来练手与学习,主要使用了反射,代理和netty异步通信,源码已在文中给出链接,如有兴趣可一起交流。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值