一、背景
基于springboot 2.3.5.RELEASE 和 dubbo-spring-boot-starter 2.7.5 的版本开发,用来总结自己的技术栈。在启动过程中遇到一些问题,故借此文章总结记录一下自己的解决思路。
二、问题集合
1、 java.lang.IllegalStateException: No registry config found or it's not a valid config! The registry config is: <dubbo:registry valid="false" prefix="dubbo.registry" />
对于这些含有 ...Config的问题,一般都跟配置有关。解决思路如下:
1)、项目紧迫的情况下可以直接百度报错的提示,看看前辈总结的经验(问题不是你的专属)。
2)、根据报错提示,点击 checkRegistry(AbstractInterfaceConfig.java:177) ,如下图所示,找到 registryConfig.isValid() ,打上断点,开启debugger,发现 RegistryConfig 这个类的属性为空,继续点击AbstractConfig 可以看到dubbo的配置方式:
dubbo-spring-boot-starter 2.7.5 高版本不在以 spring.dubbo为前缀,改成直接以 dubbo为前缀的配置,如下所示
spring.dubbo.registry.id = gc-dubbo-registry 改为 dubbo.registry.id = gc-dubbo-registry
2)、java.lang.IllegalStateException: Invalid name="org.apache.dubbo.config.ApplicationConfig#0" contains illegal character, only digit, letter, '-', '_' or '.' is legal.
方案:还是跟配置有关,注意相关dubbo的配置方式。比如:
dubbo.application.name=your-need-name
dubbo.application.id=xxx
链接: 混合配置导致的Invalid name="org.apache.dubbo.config.ApplicationConfig#0"问题 #6202
3)、KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss
解决方案:
A、查看zookeeper的机子是否可以连接,连接超时等情况。具体可以参考 zookeeper连接异常处理
B、dubbo版本与zookeeper版本问题或者项目少引入 zookeeper的依赖包。此处涉及的完整包如下:
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
<!-- dubbo所需其他依赖 使用alibaba的dubbo则不需要 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
<!-- zookeeper依赖 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.7</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
4)、其他问题
java.lang.NoClassDefFoundError: org/apache/curator/framework/recipes/cache/TreeCacheListener
少了 curator-recipes 这个包
<!-- dubbo所需其他依赖 使用alibaba的dubbo则不需要 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for /dubbo/com.allen.dubbo.api.CostService/providers/dubbo%3A%2F%2F10.0.0.104%3A30003%2Fcom.allen.dubbo.api.CostService%3Fanyhost%3Dtrue%26application%3Dgc-dubbo-provider%26deprecated%3Dfalse%26dubbo%3D2.0.2%26dynamic%3Dtrue%26generic%3Dfalse%26interface%3Dcom.allen.dubbo.api.CostService%26methods%3Dadd%26pid%3D20708%26release%3D2.7.5%26side%3Dprovider%26timeout%3D10000%26timestamp%3D1617239293620
按着 3) 的包可以解决此问题
项目地址:https://github.com/krycai/gc-framework/tree/master/gc-dubbo