dubbo服务暴露-关于本地暴露和远程暴露源码

1,094 阅读2分钟

服务暴露

本地暴露:

  • 何为本地暴露:
    • 一些服务可能只在本地环境下使用,那么这时候再通过网络通信就不太合适,可以在本地进行通信即可,这时候本地就会将相应服务暴露到本地jvm中
    • 本地暴露源码判断:当scope未设置属性时候,默认会先将服务暴露到本地,默认在引用服务的时候,优先从本地引用,假如明确知道服务是远程应用,那么可以强制指定scope=“remote”
 <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.jd.service.DemoService" ref="demoService" scope="remote" />
图片1是不填写scope属性,默认先走本地暴露,再远程暴露

图片2是设置了scope属性为remote,那么强制只暴露远程服务

图片3,图片4是设置了protocol为injvm但是其实并不会暴露到本地,可以看见在执行exportLocal方法时候要是injvm开头的不会执行

最终配置如下:也可以加深对dubbo协议配置的理解:这块可以参考:dubbo.gitbooks.io/dubbo-user-…

配置的<dubbo:protocol name="dubbo" port="20880" />这个也是默认配置,要是想让服务只暴露到本地时候,需要再配置强行指定dubbo:service配置 的protocol为injvm,否则默认还是dubbo的,给添加上registry

 <dubbo:service interface="com.jd.service.DemoService" ref="demoService"  protocol="injvm"/>

最终配置如下:测试本地暴露情况

  <!-- 使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

    <!-- 用dubbo协议在20880端口暴露服务 -->
    <!--<dubbo:protocol name="dubbo" port="20880" />-->
    <!--<dubbo:protocol name="injvm" />-->

    <!--设置一下默认的协议-->
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.jd.service.DemoService" ref="demoService"  protocol="injvm"/>
    <!--<dubbo:service interface="com.jd.service.DemoService" ref="demoService" scope="remote" />-->

    <!-- 接口实现类-->
    <bean id="demoService" class="com.jd.service.impl.DemoServiceImpl"/>

文章参考:blog.leishunyu.com/2019/05/27/…
blog.csdn.net/bluetjs/art…
www.kancloud.cn:8080/ssj234/dubb…