dubbo 获取提供者

dubbo提供两种获取提供者(provider)的办法:

  • 直接链接获取提供者     这种方式主要是提供provider的url即可,例如 dubbo://192.168.0.75:20881/…
  • 从注册中心获取提供者    这种方式提供注册中心地址  例如 zookeeper://192.168.0.200:2181

而配置方式可以是代码也可以是xml的形式:

代码获取则是从ReferenceConfig这个配置类中进行配置,xml则是类似于:

<dubbo:application name="yxinfo-web" version="1.0.0" />
<dubbo:registry address="zookeeper://192.168.0.200:2181" />
<dubbo:annotation package=""/>
<dubbo:consumer retries="0" timeout="10000"/>

但是从注册中心获取provider发现了一个问题,服务无法禁用并且无法调用其他机器上的服务,原因是在于ReferenceConfig中有一个injvm配置,xml中则是dubbo:consumer这个节点中的配置。

从源码中可以发现:

     boolean isJvmRefer;
        if (this.isInjvm() == null) {
            if (this.url != null &amp;amp;&amp;amp; this.url.length() &amp;gt; 0) {
                isJvmRefer = false;
            } else if (InjvmProtocol.getInjvmProtocol().isInjvmRefer(tmpUrl)) {
                isJvmRefer = true;
            } else {
                isJvmRefer = false;
            }
        } else {
            isJvmRefer = this.isInjvm().booleanValue();
        }

dubbo首先会判断injvm这个配置是否配置,配置了则按照配置执行,没有配置则会首先判断是否是直连获取如果是则继续,如果不是再从本地jvm中获取,本地jvm中也没有的话再从注册中心获取。那这样其实注册中心的负载均衡已经没有意义了,可能也意识到了这个问题,injvm这个属性在dubbox中已经被标记为Deprecated。

  
BugHome版权所有丨转载请注明出处:https://minei.me/archives/231.html

你可能还感兴趣

发表评论

电子邮件地址不会被公开。 必填项已用*标注