从dubbo No provider available 排查 看dubb consummer端加载流程
2018-10-28 22:13 xiaoyukid 阅读(311) 评论(0) 收藏 举报在一次项目启动过程中发现报错
进入报错的代码 InvokerInvocationHandler.java:51
MockClusterInvoker.java 70
AbstractClusterInvoker.java 232
动态代理实现
这里抛出 No provider available 异常
RegistryDirectorry.java 609
urlInvokerMap 为空 。
我们只需要找出 urlInvokerMap为何为null 。
观察 RegistryDirectorry.java 发现 urlInvokerMap 是通过notify方法来初始化的。
在notify方法打断点,不难发现问题所在,缺少 org.jboss.netty.channel.ChannelFactory 类
引入 io.netty包 即可解决
下面我们可以在 notify 方法中打断点,重启工程来看下notify方法是如何触发的
通过一步一步debug ,可以大致画出时序图
下图代码代表步骤一 refer
步骤二 getRegistry
步骤 5 join
步骤4 directory 调用 subscribe 方法会触发 notify方法, 从而初始化 urlInvokerMap
同时我们也可以发现注册中心有变化会更新urlInvokerMap
参考资料
浙公网安备 33010602011771号