1.远程调用解决的问题:
统一服务多机部署,多个不同服务相互调用;
2. 技术解决方案
Netty通信
3.调用流程
流程图有空再完善,这里先大致说一下思路:
(1)客户端通过接口new一个代理类,代理类对象中应该包含远程调用的如下信息:
private String serviceUri;//由于时同一服务多机部署,这里会涉及到一个地址路由的问题 private String serviceName; private String instanceName; private Class serviceInterface; private Properties properties; private Set exporterProtocols; private String importerProtocol;
(2)代理类方法调用
在这个过程中,借助动态代理完成了通信并反馈结果,简单的说就是当调用方法时,动态代理实际上是回去调用invoke方法,而invoke方法中的实例只是自己定义的,并非远程中真正需要的实例,因此在invoke方法中会通过Netty通信,将代理类中的相关信息传输到服务器端,服务器端根据接受到的信息,进行调用实际类的相应方法,并将返回结果通过Netty传回来。注意:由于对象在网络中涉及到序列化与反序列化过程,传输的对象均需要序列化,至于序列化采用什么序列化器根据实际选择,比较推荐的为Hessian,速度较快。
(3)服务器端
当服务器端监听到信息后,也会通过动态代理的方式调用相关方法,来反馈。具体过程后续完善。