服务暴露
本地暴露:
- 何为本地暴露:
- 一些服务可能只在本地环境下使用,那么这时候再通过网络通信就不太合适,可以在本地进行通信即可,这时候本地就会将相应服务暴露到本地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: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…