Closed SymonLin closed 5 years ago
感觉上配置没啥问题,看一下我们之前写的demo,看看能不能跑起来:https://github.com/ctripcorp/apollo-use-cases/tree/master/spring-boot-dubbo
@nobodyiam 你们的demo我试过是正常跑起来的 就是不知道我的为啥有问题 我把我的项目上传到github了 有空可以帮忙看一下吗?https://github.com/SymonLin/alpha
你的报错是dubbo的application没有配啊,和apollo没啥关系吧
java.lang.IllegalStateException: ApplicationConfig.application == null
建议你先不用apollo跑起来,然后再接入apollo
@nobodyiam dubbo相关配置配在application.properties里时是可以正常运行的 现在dubbo的相关配置都迁移到apollo配置中心了 就报上面的错误了 该试的情况我都尝试过了 都没发现原因 难道是因为项目里dubbo是以xml形式配置的 apollo不兼容这种配置方式吗?
@nobodyiam 我参考了https://github.com/ctripcorp/apollo-use-cases/tree/master/dubbo,原本以为是少了
@SymonLin
我更新了demo,增加了客户端同时启动服务的情况,启动后可以通过telnet方式测试。
如我前面所说,你这个问题在于没有在任何地方配置dubbo:application这个dubbo的必填项,我不知道是不是你用了dubbo的spring starter的缘故,在我这个项目里面,如果没有配置dubbo:application,哪怕是单独启动一个provider也是起不来的,你可以试一下把配置文件中的dubbo:application注释掉看看效果。
另外,apollo和dubbo在目前的版本中是没有任何耦合的(后续dubbo 2.7.0版本可能会做整合),apollo把配置交给spring,dubbo从spring中获取配置,所以不存在apollo不支持即是provider又是consumer的情况。
针对spring boot dubbo的demo我也更新了一下,也是OK的。
我感觉可能和你目前的配置方式也有关系,你share的项目在我本地由于缺少依赖无法编译,不过从代码中可以看到主体上是用的传统的spring和dubbo结合的方式,但是项目中又用到了dubbo-spring-boot-project,所以你是把dubbo.application.name放在apollo配置,然后把别的都放在xml中配置?
建议要么全部通过xml配置(参照apollo-use-cases/dubbo/),要么全部通过spring boot方式配置(参照apollo-use-cases/spring-boot-dubbo/),两种方式在我这里跑都是可以的。
@nobodyiam 我把所有dubbo的配置项都放apollo的 xml只放了provider跟consumer的service声明 也就是
另外我也尝试了纯spring boot方式配置(依赖dubbo-spring-boot-starter)以及原生dubbo的方式(依赖dubbo、zookeeper、zkclient、curator-framework,通过xml方式配置,配置项用${}占位符)通过apollo都可以正常取到配置且项目正常运行 所以现在是dubbo-spring-boot-starter+dubbo xml无法正常使用
所以现状是:
这个看上去可能是dubbo-spring-boot-starter的问题了,后续我们尝试重现并定位一下问题吧,如果你这边有时间的话,也可以看一下,按照报错的堆栈信息应该可以比较方便地定位到问题。
好的 感谢您的解答 ^_^
@SymonLin
看了一下spring boot + xml + apollo不OK的case,原因是这种情况下所依赖的OverrideDubboConfigApplicationListener执行时机太早了(远早于apollo配置加载的时机),所以会有问题。
不过测试了一下,#1614 合并后就可以解决这个问题。
近期在项目中集成apollo发现其中一些dubbo配置项都没生效,而其他诸如jdbc等都是正常的,不过动态获取是能拿到dubbo配置项的,但是由于启动时dubbo加载先于apollo拉取去配置中心配置,日志如下: [10-22 20:39:34,930] INFO [main] LoggerFactory[?] - using logger: com.alibaba.dubbo.common.logger.slf4j.Slf4jLoggerAdapter [10-22 20:39:34,936] INFO [main] WelcomeLogoApplicationListener[53] -
:: Dubbo Spring Boot (v0.2.0) : https://github.com/apache/incubator-dubbo-spring-boot-project :: Dubbo (v2.6.2) : https://github.com/apache/incubator-dubbo :: Google group : dev@dubbo.incubator.apache.org
[10-22 20:39:34,939] INFO [main] OverrideDubboConfigApplicationListener[68] - Dubbo Config was overridden by externalized configuration {}
:: Spring Boot :: (v2.0.4.RELEASE)
[10-22 20:39:35,152] INFO [main] DefaultApplicationProvider[85] - App ID is set to 20001 by app.id property from System Property [10-22 20:39:35,155] INFO [main] DefaultServerProvider[108] - Environment is set to [DEV] by JVM system property 'env’. [10-23 09:58:37,224] WARN [main] AnnotationConfigServletWebServerApplicationContext[558] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoController': Unsatisfied dependency expressed through field 'demoService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoServiceImpl': Unsatisfied dependency expressed through field 'betaDemoService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'betaDemoService': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: ApplicationConfig.application == null
apollo配置项如下: app.id = 20001 apollo.meta = http://xxx.xx.xx.xxx:xxxx apollo.cacheDir = ./config apollo.bootstrap.enabled = true apollo.bootstrap.namespaces = application 我也看了下github上类似的问题 感觉该配的都配了 不知道问题到底在哪?麻烦帮忙看看怎么解决 万分感谢
dubbo及apollo jar包版本如下:
Spring Boot为v2.0.4.RELEASE