【手写dubbo-7】手撸了自定义协议、远程调用、服务动态扩容,梳理一下吧!


  目前为止,笔者已经编写了一个基本的rpc框架,完成了rpc框架核心的一些功能: 自定义协议、远程调用、服务动态扩容等。

image-20210517102937346

在每一篇文章的结束位置,都附上了源码地址,如果在文章中有一些不清楚的地方可以拉取项目项目源代码。如果有不懂的地方可以Q:835029688。一起交流学习。

1、远程调用

  远程调用使用netty完成异步调用,对于netty不太熟悉的小伙伴,可以看下netty聊天的小功能。通过这个小功能完成可以稍微了解一些netty。接着通过这种思路完成了一个愣头青式的远程调用。通过调用本地方法UserService.getUserNameById (12l),实现调用服务端的具体实现。这种最进本的调用可以算是调用的雏形。

image-20210508180915785

  另外,netty是异步调用,但是调用的线程是同步调用。这样一来框架的难度就提高了,可能小伙伴无法理解,只有当真正手撸dubbo的时候,才知道这里的难度。线程在异步调用之后,必须等待结果的返回。这就考验开发者的多线程功底了。jdk自带了很多异步等待的方式。这一点大家可以按照自己的想法自行实现。笔者通过wait/notify方式简单实现了下,dubbo也是通过这种方式实现的,大家可以参考下。

2、自定义协议

  接着对这种调用进行了优化,通过一个相对友好的自定义协议进行了优化。在目前阶段,dubbo协议中有一些信息是不需要的,所以并没有全部仿照dubbo协议,单单是仿照了它的思想而已。

image-20210508180915785

  官方说Invocation 是会话域,它持有调用过程中的变量,比如方法名,参数等。这一点可以在自定义协议体现出来。

3、服务动态扩容

  一个不能动态扩容的rpc框架是不是一个完美的框架。在基本调用成型之后,立即加如服务动态扩容功能。引入注册中心概念,注册中心在此担任服务的"通讯录"。消费者在"通讯录"中查找对应的服务者信息。以此实现进行rpc调用时只调用服务正常的提供者。在多服务者时就会涉及到一个负载均衡的问题,目前采用随机调用,稍后会对此进行扩展。

总结

  虽然已经可以基本调用,但是还是有dubbo的很多点,很多概念没有合理的引用出来。例如集群容错、线程模型、直连提供者、多协议、SPI等等,稍后会逐步引入。此工程主要目的是为了更好的理解dubbo框架,如果有严重bug,或者不对的地方,大家可以指出来。

都看到这里了, 大家来一波关注吧,谢谢大家了。结尾送大家一个美女图,放松一下心情。
img

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叁滴水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值