初次接触Dubbo,犯了挺多低级错误,仅记录在此 ~~~
OS: MacOS
IDE: IntelliJ
网上有挺多不错的入门教程,如:
https://blog.csdn.net/noaman_wgs/article/details/70214612
https://blog.csdn.net/jingyangV587/article/details/78901937
入坑前的热身:开发环境、各种包、依赖服务(zookeeper)都还算顺利,下面开始跳:
1. 接口实现的分离:
Problem: 各种教程基本都是Eclipse + Maven + Spring + Dubbo,通常由三部分组成:Interface, Provider, Consumer,教程里是放在一个Project底下,所以引用起来比较简单,想更贴近实际情况,所以我创建了三个项目,但由于Provider, Consumer都需要把Interface作为依赖,所以要把Interface包导入到maven中。
Root cause: Interface包没有导入本地Maven库。
Solution: 在Interface项目目录下运行以下命令,等运行成功之后,就可以在其它项目里引用该依赖了:
mvn install
2. 找不到Spring配置文件
Problem: 在Provider工程中,我写了一个provider.xml的配置,但在IntelliJ中运行主函数的时候,老是提示找不到该文件。
Root cause: Java类找文件是从编译后的路径,而不是源文件目录查找文件。
Solution: 刚开始以为是相对路径的问题,试了把该文件放到各个folder里,都不起作用,甚至尝试着用java语句打出空文件路径(System.out.println((new File("")).getAbsolutePath())),也不能解决,猜想所在的目录与classpath有关,尝试把配置文件放到target/classes底下,终于能加载配置了。
3. 找不到Dubbo Schema
Problem: 按着入门教程完成了Provider部分,启动服务时总是报:
Failed to read schema document 'http:// code.alibabatech.com/schema/dubbo/dubbo.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not .
Root cause:阿里已经把Dubbo贡献给Apache,所以DTD的网址也挪到了http://dubbo.apache.org/schema/dubbo/dubbo.xsd,故原URL失效。
Solution: 网上有一些介绍如何override IDE中DTD的配置解决此类问题,但在我本地环境中不起作用,而且改成有效的URL即http://dubbo.apache.org/schema/dubbo/dubbo.xsd也不起作用,无奈之下,只好在项目中建了自己的META-INF,并增加了如下三个文件:dubbo.xsd, spring.handlers, spring.schemas,其中dubbo.xsd来自dubbo的jar包,spring.handlers内容如下:
http\://dubbo.apache.org/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler
spring.schemas内容如下:
http\://dubbo.apache.org/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd
并把该META-INF拷贝到target/classes目录下方可生效,最终目录结构如下:
使用此方法请注意以下两个问题:
a. 想着的spring配置中也应改成http://dubbo.apache.org/schema/dubbo/dubbo.xsd
b. 加上所有的包依赖: zookeeper, dubbo, 101tec
4. 找不到对应的Bean
Problem: 启动Consumer主函数时,报找不到Bean的错误。
Root cause: 依赖缺失。
Solution: 很多问题都有可能引起这种现象,我遇到的只是其中一种,即在Spring配置中缺少相应的依赖声明,加上即可。
链接:
本文提到的demo程序
https://blog.csdn.net/noaman_wgs/article/details/70214612
https://blog.csdn.net/jingyangV587/article/details/78901937