作为一个dubbo使用新手,有必要总结一些常见的dubbo问题,提升解决问题的套路。
1.dubbo consumer 调用provider报错(1)- No provider available
问题:No provider available from registry xxx from service xxx on consumer xxx may be providers disabled or not registrered。如下图所示:
原因:
根据源码的截图所示(下图),就两个原因:
1)No service provider
2)Service providers are disabled
解决办法:
1).provider部署分支不正确,部署正确的分支。
2).consumer部署分支的zookeeper地址不正确。
2.dubbo consumer调用provider报错(2)
问题:com.alibaba.dubbo.rpc.RpcException: Rpc cluster invoker for interface xxx on consumer 10.2.4.63 use dubbo version 2.6.0.2 is now destroyed! Can not invoke any more.
原因:
调用链路:invoke()–>checkWhetherDestroyed()
consumer端调用的时候,发现出现实例已经destory,就抛出此异常
怀疑是由于内存不足,dubbo进程触发了spring的destroy()方法,同时就执行到了AbstractClusterInvoker.destroy(),但是此时进程并没有挂掉,所以就出现了可以调用,但是调用失败的情况。
解决方法:
1)查看provider服务器是否内存不够,kill掉不相干的进程。
2)重启provider服务。
3.dubbo consumer 调用provider报错(3)- NoSuchMethodException
问题:Caused by: com.alibaba.dubbo.common.bytecode.NoSuchMethodException: Not found method “getSocialResourceByRegionId” in class com.missfresh.product.center.service.impl.SocialResourceServiceImpl.
原因:
dubbo服务部署的分支里没有相关接口的实现。
解决方法:
部署对应的分支。或者是直接部署master。
4.dubbo consumer 调用provider报错(4)- Thread pool is EXHAUSTED!
问题:com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method queryProductSalsPromotionTagList in the service com.missfresh.product.center.service.IProductCategorysService. Tried 1 times of the providers
原因:
如上图所示,provider服务支持的最大线程数为300。
解决方法:
检查程序中并发采用的线程池初始化值,是否合理。最大线程个数不能大于300.