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):真正的服务提供者。

客户端存根:存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。

服务端存根:接收客户端发送过来的消息,将消息解包,并调用本地的方法。

客户端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

stub理解:https://www.jianshu.com/p/9ccdea882688

以上是关于XXL-RPC原理分析的主要内容,如果未能解决你的问题,请参考以下文章

ContentProvider原理分析

SurfaceFlinger 原理分析

SpringBoot启动原理分析

Appium-Uiautomator2-Server原理分析

SpringBoot 高级 原理分析 -- @EnableAutoConfiguration 注解

SpringBoot 高级 原理分析 -- @Import注解