解决接口与动态代理绑定问题,实现rpc的最后一站

Posted 云中志

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决接口与动态代理绑定问题,实现rpc的最后一站相关的知识,希望对你有一定的参考价值。

前言

昨天我们终于把rpc动态代理实现了,有了动态代理才是真rpc,但是真正实现之后,发现rpc服务框架还是挺简单的,核心的核心就是动态代理,如果没有动态代理作技术支持,这个远程调用还真的不好实现,至少我没有更好的实现思路。

今天我在昨天动态代理的基础上,做了一些整理优化,增加动态帮忙功能,让我们的框架在使用的时候可以更灵活,具体来说就是在我们服务消费者启动的时候,会自动扫描加了RpcConsumer的消费者类,如果该类存在加了RpcClient注解的属性,就会给该属性绑定一个动态代理对象,这样在调用接口的方法,就会自动去调用远程方法。下面就看下具体如何实现。

动态代理绑定

这里的绑定就是在消费者注册的同时,生成代理类,然后创建消费类的实例,并把生成的代理类赋值给消费者实例加了RpcClient注解的字段,这里同时还要把当前消费者的实例存放到IOC容器中,不然赋值就失效了,因为赋值只能给实例的属性赋值。

解决接口与动态代理绑定问题,实现rpc的最后一站

使用的话,也很简单,只需要从容器中直接拿出消费者的实例,然后通过消费者实例调用对应的service方法。这一块如果和我们的syske-boot服务器整合的话,那用起来就很方便了,直接通过Service注解就ok了。

解决接口与动态代理绑定问题,实现rpc的最后一站

测试

我们来测试下看看。服务端没有任何变化,直接启动即可,然后运行消费者端:

可以看到,消费者consumer实例的helloService已经和代理对象绑定成功。

总结

今天的内容很简单,就是简单的流程梳理和优化,原来考虑rpc的内容会和之前的web服务器一样,能够分享一周左右,但是真正做下来,发现核心的知识点不多,所以rpc的知识差不多就要结束了,后续可能会再探讨下与zk整合这块的实现、与我们的syske-boot项目整合的实现,其他目前还想不到,等后面再说。

rpc这块结束后,我打算去研究下限流、熔断、网关等技术的实现,相关的技术还有很多,比如配置中心、注册中心等,反正我觉得搞清楚原理,然后通过自己的思路把这些核心功能实现,整个过程还是蛮有意思的,不仅对好多组件的原理有了不一样的认识,同时还对java底层的一些原理和解决方案,有了更多的了解。

好了,今天就到这里吧!天气又开始热起来了,各位小伙伴注意防暑哦!

- END -