定义
RPC也就远程过程调用,是相对于本地过程调用而言的;例如我现在有个单体服务,A类中注入了B类,这时候可以直接在A类中调用B类中的方法,但是当服务改造成分布式服务后,A类和B类可能不在同一个服务下了;这时候该怎么发起调用呢?
你可能会想到restful接口的方式,那么这需要事先知道B那边的提供的接口地址,有没有办法像在本地一样调用B服务呢?
能不能在A服务启动时,就把B服务的接口放到容器里,这样我调用的时候也直接注入就可以用了呢?当然可以,这个就是rpc的具体实现
RPC的基本实现逻辑:
定义远程方法接口(服务契约),包括方法名称、参数类型、返回值类型等信息;
生成客户端和服务端的 stub(桩)和 skeleton(骨架)代码;
客户端通过 stub 调用远程方法,stub 将请求序列化为网络传输格式,然后通过网络发送给服务端;
服务端接收到请求后,通过 skeleton 进行反序列化,根据接口定义执行远程方法,并将返回值序列化为网络传输格式,发送给客户端;
客户端接收到服务端的响应后,通过 stub 进行反序列化,获取返回值
PC的使用场景
RPC 通常用于分布式系统中,解决分布式应用程序之间的通信问题。以下是一些使用场景:
微服务架构:在微服务架构中,服务通常会分布在不同的物理机器上,使用 RPC 可以方便地进行服务间通信。
跨语言通信:如果分布式系统中使用的编程语言不同,使用 RPC 可以实现跨语言通信。
异步任务:RPC 还可以用于执行异步任务,如调度任务等,可以将异步任务委托给远程机器处理,从而实现分布式计算。
分布式事务:在分布式系统中,可能需要实现分布式事务,RPC 可以协调多个机器之间的事务,确保数据的一致性