对于 dubbo, 有生产者和消费者两端。对于生产者端的配置,按照 github 上 springBoot 的官方案例,是把要暴露 service 接口和 service 实现都放在同一个包下。如图:
同时扫描配置也是只扫描这个包就行了。
消费者端是这样,也是要创建 service 的接口,同时调用 service 接口的 service 实例也是放在同一个包下。
同时消费者端的扫描配置是这样:
但是我觉得这样太麻烦了,生产者端和消费者端要写两份接口,如果你不止这一个项目,还有另一个项目也要 RPC 调用,另一个项目又要写,这样会越写越多,加上之前搭这种 springBoot 项目应该把公共的接口抽离出来,不用写多份,同时也便于其他项目进行调用。就像这样:
把接口单独放进一个 maven 项目里。
一开始我生产者端结构不变,只把消费者端接口抽取出来的时候,发现,无论怎么配置扫描的包,配置成接口所在的包,还是调用接口的类所在的包都无法,都无法注入这个生产者,报的是空指针异常,说明这个消费者压根就没找到这个生产者。网上找了挺多资料,折腾了挺久,都没有什么解决方案,后面打开 dubbo -admin 看看,发现:
发现竟然没有提供者,一瞬间有点懂了,应该 dubbo 不是根据名字去找生产者的,似乎是根据前面的包名 + 接口名字去找对应的生产者(具体实现原理暂时没有这么高的水平去研究)。原来如此,那我直接将生成者和消费者一起提取出来不就 ok? 这也是最终目的,原来可以一步到达,我自己非要分开走,于是乎提取出来,程序就通了。
不过也明白了扫描配置那里
生产者端应该是接口实现类所在的包,消费者端应该是调用接口的类所在的包。(不是接口所在的包)。
记录下!!!!