困扰了一天的dubbo问题

 先贴出错误 "errorMessage": "No provider available from registry localhost:6379 for service xxx.AttachmentService on consumer 172.20.80.1 use dubbo version 2.7.12, please check status of providers(disabled, not registered or in blacklist)."

}

背景:

 项目中依赖了attachmentService,本来Attachment在另一个微服务。但是为了少部署一个微服务,把AttachmentServiceImpl实现类也打包到了同一个jar包。

预期结果:

        dubboReference默认会走inJvm协议。但是实际运行时报了上面的错误。

解决思路:

        看报错注册中心没有相应的提供者,那为什么没有注入呢。一切看着毫无破绽,而且在启动类中配置了相应的componentScan,按道理是能被扫描到的。

困扰了一整晚,苦思冥想,还是没有思路。看来只能使出绝招了。

源码+原理

        如何找到入口,springboot+dubbo,以springboot的老套路入手。一般都会在starter项目下的spring.factories找到一些自动配置类

打开源码发现了熟悉的身影,packagesToScan,表示哪些包需要扫描。看到这个,感觉离胜利已经不远了。跟踪断点进来,发现此变量的值果然不对。

启动类上配置的ComponentScan(basePackage=“xxx”)居然没生效!!

看源码中的packagesToScan的值和启动类的根目录是一样的,怀疑是@EnableDubbo惹的货 

因为spring如果不配置basePackage的话,默认会以启动类的根目录为basePackage的值。

解决方法, 在@EnableDubbo(scanBasePackages = "")配置具体的包名,或者直接删除@EnableDubbo注解(此注解不需要配置也行)

总结

@EnableDubbo覆盖了ComponentScan(basePackage=“xxx”)里面的basePackage,导致了

attachmentService没有被扫描注册到注册中心,导致了报错。

后续的dubbo启动原理有待研究,今天暂时先解决此问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值