XXL-RPC原理分析
Posted palapala
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XXL-RPC原理分析相关的知识,希望对你有一定的参考价值。
背景
RPC(Remote Procedure Call Protocol,远程过程调用),调用远程服务就像调用本地服务,在提供远程调用能力时不损失本地调用的语义简洁性;
一般公司,尤其是大型互联网公司内部系统由上千上万个服务组成,不同的服务部署在不同机器,跑在不同的JVM上,此时需要解决两个问题:
- 1、如果我需要依赖别人的服务,但是别人的服务在远程机器上,我该如何调用?
- 2、如果其他团队需要使用我的服务,我该怎样发布自己的服务供他人调用?
“XXL-RPC”可以高效的解决这个问题:
- 1、如何调用:只需要知晓远程服务的stub和地址,即可方便的调用远程服务,同时调用透明化,就像调用本地服务一样简单;
- 2、如何发布:只需要提供自己服务的stub和地址,别人即可方便的调用我的服务,在开启注册中心的情况下服务动态发现,只需要提供服务的stub即可;
客户端(Client): 服务的调用方。
服务端(Server):真正的服务提供者。
客户端存根:存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
服务端存根:接收客户端发送过来的消息,将消息解包,并调用本地的方法。
![](https://image.cha138.com/20210616/673f68e63daf474990ed4edb84ac2e74.jpg)
客户端stub
代码位置参考(可在idea中全局搜索)
服务发现 TreeSet<String> addressSet = invokerFactory.getRegister().discovery(serviceKey);
负载均衡 finalAddress = loadBalance.xxlRpcInvokerRouter.route(serviceKey, addressSet);
发送请求 clientInstance.asyncSend(finalAddress, xxlRpcRequest);
序列化 byte[] requestBytes = serializer.serialize(xxlRpcRequest);
服务端stub
反射调用代码位置参考(可在idea中全局搜索)
// invoke + response
XxlRpcResponse xxlRpcResponse = xxlRpcProviderFactory.invokeService(xxlRpcRequest);
// response serialize
byte[] responseBytes = xxlRpcProviderFactory.getSerializerInstance().serialize(xxlRpcResponse);
引用
源码地址:https://gitee.com/xuxueli0323/xxl-rpc?_from=gitee_search
以上是关于XXL-RPC原理分析的主要内容,如果未能解决你的问题,请参考以下文章
Appium-Uiautomator2-Server原理分析