dubbo中消费者路由选择生产者的过程解析

本文详细解析了在Dubbo中,当消费者遇到服务提供者被禁用的情况,导致调用失败的问题。通过源码分析,揭示了消费者在Zookeeper中查找并遵循路由规则、配置规则选择服务的流程,以及Mock机制如何在服务不可用时保证服务的可用性。问题的解决关键在于删除Zookeeper中禁用服务的配置目录。
摘要由CSDN通过智能技术生成

最近帮忙同事解决了一个很奇怪的问题,首先我们启动一个某个服务的生产者服务,service版本号是1.0,然后我们启动了一个消费者来调用这个生产者reference版本号也设置为1.0,但是在启动消费者程序之后发现怎么也消费不到生产者服务,报错为:

com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method xxx in the service com.xxx.xxx. No provider available for the service xxx.xxx:1.0 from registry 1.2.3.4:21810on the consumer

但是通过zookeper的目录发现生产者的确是存在的,百思不得其解,然后我们尝试把生产者和消费者版本号都修改为2.0,结果这样子就能消费成功了…
然后对这个诡异的问题开始查找原因,最后终于在zookeper上发现眉目,发现如下目录

/dubbo/com.xxx.xxx/configurators/override://1.2.3.4:20000/com.xxx.xxx?category=configurators&disabled=true&dynamic=false&enabled=true&version=1.0

这是关于生产者服务提供方动态配置规则的目录,一般是在dubbo-admin配置服务规则之后会生成这个目录,然后之前监听过zookerper的节点会接到回调,然后更新对应的路由规则

从上面的内容可以看到disabled=ture,所以这里设置的路由规则就是1.2.3.4:20000这个服务的1.0版本是被禁用掉的,所以对于消费者来说1.0版本是无效版本,这也就是为什么版本改成2.0之后,可以调用成功,所以我们修复这个问题的方式就是把这个目录删掉即可。

下面我们来跟踪一下源码,看一下dubbo里面消费者选择生产者的路由过程
我们从代理对象执行invoke方法开始(消费者的代理过程这里不详述)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值