本地调用
Dubbo 中的本地调用
功能描述
本地调用使用 injvm 协议,这是一个伪协议。它不打开端口,不发起远程调用,只在 JVM 中直接关联,但执行 Dubbo 的 Filter 链。
使用场景
当我们需要调用远程服务,而远程服务尚未开发,并且使用 injvm 协议在本地实现了类似的服务时,调用此服务时,我们可以调用本地实现的服务。
如何使用
定义 injvm 协议
<dubbo:protocol name="injvm" />
设置默认协议
<dubbo:provider protocol="injvm" />
设置服务协议
<dubbo:service protocol="injvm" />
优先使用 injvm
<dubbo:consumer injvm="true" .../>
<dubbo:provider injvm="true" .../>
或者
<dubbo:reference injvm="true" .../>
<dubbo:service injvm="true" .../>
注意
Dubbo 从 2.2.0
开始,每个服务默认会在本地暴露,并且可以在本地引用,无需任何配置。如果您不想将服务暴露到远程,您只需要在提供者中将协议设置为 injvm。**
自动暴露
从 2.2.0
开始,每个服务默认在本地暴露。引用服务时,默认优先使用本地服务。如果您想引用远程服务,可以使用以下配置强制引用远程服务。
<dubbo:reference ... scope="remote" />
动态配置调用行为
从’ 3.2’ 开始,Dubbo 提供的 api 允许用户动态配置单个调用是本地调用还是远程调用,未配置时,默认优先引用本地服务。
将单个调用配置为远程调用。
RpcContext.getServiceContext().setLocalInvoke(false);
将单个调用配置为本地调用。
RpcContext.getServiceContext().setLocalInvoker(true);
上次修改时间:2023 年 3 月 23 日:更新 local-call.md (#2455) (4d8e6b4d1bf)