莫那·鲁道

惯于闲看花飞花落, 心念天际云卷云舒.

Coder, 欢迎留言 😆.


GitHub

SOFA RPC 客户端设计模式

图片来自 SOFA 官方。

RPC 框架常见功能

图片来自 SOFA 官方。

 SOFA RPC 客户端调用流程

笔者画的对应的 UML:

解释一下:User 就是用户使用的 API,会被 InvocationHandler 拦截,然后被实现了 Invoker 接口的具体实现类拦截,从这里开始,最核心的方法,就是:SofaResponse invoke(SofaRequest request) , 这个方法一直到上图中 Cluster 向 Remoting 发送信息才停止。期间会被层层过滤器处理 Request,Filter 也有 invoke 方法,但是包含 FilterInvoker,所以,他们是组合关系,每个过滤器都绑定了一个 FilterInvoker,这个维持了过滤器链表的关系,可以在过滤器与过滤器之间做一些事情,也是典型的职责链设计模式。

当走到最后一个 Invoker,这个 Invoker 会调用 Cluster 的 sendMsg 方法,将 Request 信息发送给 Remoting 模块,进入命令模式。这之前一直是职责链模式。

命令在 Remoting 里传播,Remoting 会对 Request 进行序列化,按照协议进行编码,最后通过网络发送给服务端。当然,返回值也是一个命令,流程类似。