受启发的链接:
https://blog.youkuaiyun.com/fei33423/article/details/50345955
上边的链接表明了出现这个异常的原因。但是根本的原因在哪,却是没有指出来。首先我们需要找到这个方法:

然后,看到UrlUtils.isMathc(consumer,url) 了吗,点进去。

看我画圈的地方。dubbo会比较服务提供者 和 服务消费者的 group(默认是null),version,接口名。如若你的提供者或消费者的version有一方没有申明或版本不对(我遇到的就是这个。。。),就会最终报错( forbid consumer)。这个方法如果比较的接口不对,会返回false,然后第一张图的urls 会返回一个 size==0的list.

然后看图3.当urls size 为 0时候,下面的 toUrlsWithEmpty 方法中,会把消费者的protocol变为 empty.

然后看图4. refreshInvoker方法。如果你的接口的protocol 是 empty,那么把forbidden 设置为true.

然后看图5 doList 方法。如果forbidden 为true,则会抛出 forbid consumer 。。。。。到此追踪完毕。
本文深入探讨了Dubbo框架中出现forbidconsumer异常的具体原因,主要聚焦于服务提供者与消费者之间的版本不匹配问题。通过跟踪源码,详细分析了Dubbo内部如何进行服务版本一致性检查,并解释了当版本不一致时Dubbo如何处理此类异常。
2954

被折叠的 条评论
为什么被折叠?



