解决接口与动态代理绑定问题,实现rpc的最后一站
共 1046字,需浏览 3分钟
·
2021-06-23 01:40
前言
昨天我们终于把rpc
动态代理实现了,有了动态代理才是真rpc
,但是真正实现之后,发现rpc
服务框架还是挺简单的,核心的核心就是动态代理,如果没有动态代理作技术支持,这个远程调用还真的不好实现,至少我没有更好的实现思路。
今天我在昨天动态代理的基础上,做了一些整理优化,增加动态帮忙功能,让我们的框架在使用的时候可以更灵活,具体来说就是在我们服务消费者启动的时候,会自动扫描加了RpcConsumer
的消费者类,如果该类存在加了RpcClient
注解的属性,就会给该属性绑定一个动态代理对象,这样在调用接口的方法,就会自动去调用远程方法。下面就看下具体如何实现。
动态代理绑定
这里的绑定就是在消费者注册的同时,生成代理类,然后创建消费类的实例,并把生成的代理类赋值给消费者实例加了RpcClient
注解的字段,这里同时还要把当前消费者的实例存放到IOC
容器中,不然赋值就失效了,因为赋值只能给实例的属性赋值。
使用的话,也很简单,只需要从容器中直接拿出消费者的实例,然后通过消费者实例调用对应的service
方法。这一块如果和我们的syske-boot
服务器整合的话,那用起来就很方便了,直接通过Service
注解就ok
了。
测试
我们来测试下看看。服务端没有任何变化,直接启动即可,然后运行消费者端:
可以看到,消费者consumer
实例的helloService
已经和代理对象绑定成功。
总结
今天的内容很简单,就是简单的流程梳理和优化,原来考虑rpc
的内容会和之前的web
服务器一样,能够分享一周左右,但是真正做下来,发现核心的知识点不多,所以rpc
的知识差不多就要结束了,后续可能会再探讨下与zk
整合这块的实现、与我们的syske-boot
项目整合的实现,其他目前还想不到,等后面再说。
rpc
这块结束后,我打算去研究下限流、熔断、网关等技术的实现,相关的技术还有很多,比如配置中心、注册中心等,反正我觉得搞清楚原理,然后通过自己的思路把这些核心功能实现,整个过程还是蛮有意思的,不仅对好多组件的原理有了不一样的认识,同时还对java
底层的一些原理和解决方案,有了更多的了解。
好了,今天就到这里吧!天气又开始热起来了,各位小伙伴注意防暑哦!
- END -