受启发的链接:
https://blog.csdn.net/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 。。。。。到此追踪完毕。