【中】No provider available from registry RegistryDirectory
- Dubbo 3.2.9
- Nacos 2.1.0
最近在做配置文件升级,服务比较多,之前的Dubbo配置各个服务写的比较乱,有的用Nacos上的 data-id,有的又是在自己的服务引入配置
遂准备统一了,全部都用Nacos上的配置,同时修改了Dubbo服务名
dubbo.application.name=${spring.application.name}
发到线上的时候,线上崩了,部分服务出现如下错误
No provider available from registry RegistryDirectory(registry: xxxxxxxxxxx:8848)-Directory(invokers: 0[], validInvokers: 0[], invokersToReconnect: 0[]) for service com.xdx97.xxxx.api.xxxxx:1.0.0 on consumer 127.0.0.1 use dubbo version 3.2.9, please check status of providers(disabled, not registered or in blacklist).
注: IP和服务名做了隐藏处理
问题表象
- 部分服务出现上述的 No provider available
- 这次我改动的是4个服务,重启了它们,但没有重启消费者,它们的消费者很多,只有部分消费者报错,部分消费者是正常的
- 出问题的消费者,只需要重启一下就又可以了
问题排查
半年来所有服务都没有报过这个错,猜到是因为修改了 dubbo.application.name 的原因,但也不能完全确认,测试环境没复现问题,也不好拿线上测试
下面这个日志可以看到对应的服务可用数,当生产者变动的时候也会推送到消费者
[DUBBO] Received invokers changed event from registry. Registry type and com.xdx97.api.DemoApi
其中一个异常的消费者日志如下
我们观察到每个异常的服务,都会有大量可用数量为0的日志,且最后一条都是可用为 0
排查文档
地址找不到异常
Dubbo3.1.2经常找不到服务的提供者
问题原因
后来我们在Nacos提了工单,Nacos的开发拉了我们和Dubbo的开发组了一个群,经他们排查这是当前这个Dubbo版本的一个Bug
原因也确实是因为修改了 dubbo.application.name
在修复之前,临时解决办法,开启Nacos的推空保护
推空保护
MSE注册配置中心高可用最佳实践