首页 > 编程知识 正文

dubbo啥时候出来的(dubbo loadbalance)

时间:2023-05-04 05:34:12 阅读:65535 作者:1805

解决源地址:http://www.jameswxx.com/中间件dubbo问题: forbid-consumer/

在线环境中,这种异常情况频繁发生。

com.Alibaba.dubbo.RPC.RPC exception : forbidconsumeraccessservicefromregistryusedubboversion2.5. 3,pleasechecheckrek 请检查注册中心的访问列表、黑名单和白名单。 事实上,在线环境中完全没有为服务创建白名单或黑名单的机制。 因为在联机环境中传递给开发人员的帐户是guest,无权创建黑白列表。 今天好几个人问了我这个问题。 我仔细看了源代码,找到了根源。 根据异常堆栈,抛出此异常的代码位于RegistryDirectory的第579行,如下所示: publiclistinvokertdolist (invocation invocation ) if(forbidden ) thrownewrpcexception (RPC exception.forbidden _ )。 “forbid consumer“net utils.get localhost (”access service“get interface”. getname )”from registry“geturl”.“useded 如果pleasecheckregistryaccesslist (whitelist/black list )." forbidden变量为true,则抛出异常。 forbidden变量默认为false,但它是什么时候变成true的? 请看注册表目录中的这段代码。 隐私保护用户(listurlinvokerurls ) invokerurls!=nullinvokerurls.size (==1invoker URLs.get (0)!=null constants.empty _ protocol.equals (invoker URLs.get (0).getProtocol ) ) { this . forbidden=true; this.methodinvokermap=禁止访问null; //空列表destroyAllInvokers (; //关闭所有Invoker }如果invokerUrls的大小为1,url的协议标题为Constants. EMPTY_PROTOCOL,则将forbidden设置为false、constants.emptts 当一个服务的提供程序更改时调用。 例如,如果zookeeper上某个服务的提供程序的目录内容发生更改,zk侦听器将启动。 提供程序的数量将发生更改。 例如,由于新提供程序已启动,且提供程序脱机,因此必须更新本地提供程序,refreshInvoker方法中提供了特定逻辑。 此方法的调用栈如下所示: zookeeper推送的URL的协议部分并不是无缘无故变成了empty,一定是在某个地方发生了更改。 现在,让我们来看看Constants. EMPTY_PROTOCOL是从哪里调用的: 见图中红色香蕉外套部分。 当zookeeper首次订阅或订阅的信息发生更改时,将触发toUrlsChanged方法。 让我们看看这个方法内部发生了什么。 完整的代码如下。 隐私保护工具(liststringproviders (listurlurls=tourlswithoutempty (consumer,providers ) ); if (URLs==null|) (intI=path.lastindexof )/); String category=i 0? path:path.substring(I1; URL empty=consumer.set protocol (constants.empty _ protocol ).addparameter ) constants.category_key,category ) }返回URLs; 如果toUrlsWithoutEmpty的结果为空或size为0,则可以看到协议为empty的url被强制返回。 酱好像在这里。

传递的ListString providers实际上是最新的服务提供者信息,如果一个服务没有提供者,则提供者将是size为o的列表,返回协议标头为empty的url,然后返回结构

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。