4.24. 本地调用

本地调用使用了 injvm 协议,是一个伪协议,它不开启端口,不发起远程调用,只在 JVM 内直接关联,但执行 Dubbo 的 Filter 链。

配置

  • 定义 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 每个服务默认都会在本地暴露,无需进行任何配置即可进行本地引用,如果不希望服务进行远程暴露,只需要在 provider 将 protocol 设置成 injvm 即可

自动暴露、引用本地服务

  • 2.2.0 开始,每个服务默认都会在本地暴露。在引用服务的时候,默认优先引用本地服务。如果希望引用远程服务可以使用一下配置强制引用远程服务。
    <dubbo:reference ... scope="remote" />
    
下一节:参数回调方式与调用本地 callback 或 listener 相同,只需要在 Spring 的配置文件中声明哪个参数是 callback 类型即可。Dubbo 将基于长连接生成反向代理,这样就可以从服务器端调用客户端逻辑。