RPC学习——无注册中心
2020-07-15 本文已影响0人
扯闲话
服务发布端
服务端发布服务类:RpcServer
方法名:publisher,发布服务
任务处理类:ProcessorHandler
方法名:run,该类实现了Runnable
方法名:invoke,本地的反射调用方法
服务发布流程
类的实例化
RpcServer rpcServer = new RpcServer();
发布流程
rpcServer.publisher(new HelloServiceImpl(), 12345);——>开启socket监听,当监听到消息之后线程池提交消息——>run(),反序列化请求,封装到Request中——>执行本地invoke方法——>分解信息,反射调用,得出结果
总结
开启socket监听
服务消费端
客户端代理类:RpcClientProxy
方法名:clientProxy,生成代理对象
动态代理类:RemoteInvocationHandler
方法名:invoke,发起客户端和服务端的远程调用,调用客户端的信息进行传输
socket传输类:TcpTransport
方法名:newSocket,准备创建Socket连接
方法名:send,发送请求
服务端消费流程
1、proxy.clientProxy(IHelloService.class, "127.0.0.1", 12345);生成一个代理对象
2、iHelloService.sayHello("张三");代理对象调用——>代理类的invoke方法。解析调用信息为RpcRequest,调用TcpTransport的send方法——>创建socket连接,ObjectOutputStream发送请求,ObjectInputStream接收请求
注:
用到的知识点:代理、序列化、线程池、Socket + IO
参考: