我们在使用Dubbo时,经常会出现以下错误
org.apache.dubbo.rpc.RpcException: No provider available from registry 10.58.16.122:2181 for service cn.tongdun.layout.engine.client.service.LayoutApiRpcService:2.4.0 on consumer
10.57.240.117 use dubbo version 2.7.22, please check status of providers(disabled, not registered or in blacklist).
对于该错误,我们需要分析的地方如下三处
1.首先查看报错的版本原因
由图可知,该报错原因为在注册中心10.58.16.122:2181中没有消费到版本为:2.4.0的服务,导致项目调用失败
2.解决方法:
1)首先我们可以安装dubbo-admin在服务配置中先查看该注册中心中是否有该服务的提供者
可以看到,注册中心中已经注册了该服务,并且还存在多个版本,那么就是说,提供者是存在的,是由于本地配置的原因没有调用到注册中心中注册的服务
2)检查本地配置
在知道注册中心中存在服务后,可以判断是否是调用的版本出现了问题,在本次遇到的问题中,发现注册中心中存在多个同样的服务但是他们后面的版本好却不一致,可以去查看配置文件中,我们配置dubbo消费者和提供者的版本好分别对应的是哪个
由此可见,他们引用的版本都是统一的,找到该版本真实的配置项发现,真实引用的版本和目前异常中调用的服务版本并不相同
这样就可以确定问题的所在了,是由于服务版本问题导致的,但是目前配置的provider中并没有看到有配置其他版本的配置项,那么2.4.0是从哪里出现的呢
3) 查看该服务在配置类或配置文件中引用的服务版本
在配置类中,看到,原来这里用了配置项,如果找不到这个配置项就会赋值默认值,用这个配置项在配置文件里面全局搜索了一下,发现根本没有该配置项,所以自行添加该配置项,使它引用的服务版本和其他的privider一样就好了