springboot 集成dubbo问题

### 一、背景 基于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" /> ![image.png](https://images.codewd.com/2e9cb6d95b276e290d65445a6c41ad7e.png) 对于这些含有 ...Config的问题,一般都跟配置有关。解决思路如下: 1)、项目紧迫的情况下可以直接百度报错的提示,看看前辈总结的经验(问题不是你的专属)。 2)、根据报错提示,点击 checkRegistry(AbstractInterfaceConfig.java:177) ,如下图所示,找到 registryConfig.isValid() ,打上断点,开启debugger,发现 RegistryConfig 这个类的属性为空,继续点击AbstractConfig 可以看到dubbo的配置方式: ![image.png](https://images.codewd.com/353aaf27b6a5d40c5e10cf88215025ea.png) ![image.png](https://images.codewd.com/bd81d372e1afbe64a248c596830c4065.png) ![image.png](https://images.codewd.com/1c2e13c40fe87083c0da900b69820ad1.png) dubbo-spring-boot-starter 2.7.5 高版本不在以 spring.dubbo为前缀,改成直接以 dubbo为前缀的配置,如下所示 spring.dubbo.registry.id = gc-dubbo-registry 改为 dubbo.registry.id = gc-dubbo-registry ![image.png](https://images.codewd.com/f175b80fb2aa1478d3803b84903eaa5d.png) 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的依赖包。此处涉及的完整包如下: ```java <!-- 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 这个包 ```java <!-- 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) 的包可以解决此问题