1.Rpc简介
RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议。它允许像调用本地服务一样调用远程服务。它可以有不同的实现方式。如RMI(远程方法调用)、Hessian、Http invoker等。另外,RPC是与语言无关的。常见的Rpc框架如下:
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行的Java应用提供网络和web连接。
这个RPC框架使用的一些技术所解决的问题:
服务发布与订阅:客户端data-job-executor通过JettyRpc向服务端data-job-admin注册。
通信:使用Jetty作为通信框架。
Spring:使用Spring配置服务,加载Bean,扫描注解。
动态代理:客户端使用代理模式透明化服务调用。
消息编解码:使用hessian序列化和反序列化消息。
RemoteHttpJobBean中的runExecutor()方法中,ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address).getObject(),远程客户端代理对象NetComClientProxy的getObject()方法中,jettyClient.send(request)先通过HessianSerializer将请求序列化,向服务端发送调度请求,响应对象进行反序列化再返回给客户端;服务端JettyServerHandler的类中handle()方法拿到客户端的序列化后的请求,先进行反序列化,然后通过服务端远程代理工厂NetComServerFactory.invokeService(rpcRequest, null)实现执行器中的JOB远程调度;