apolloconfig / apollo

Apollo is a reliable configuration management system suitable for microservice configuration management scenarios.
https://www.apolloconfig.com
Apache License 2.0
29.16k stars 10.2k forks source link

关于dubbo在apollo的配置 #1040

Closed tangzhenhuang closed 6 years ago

tangzhenhuang commented 6 years ago

我发现dubbo的相关配置(例如zookeeper注册中心的地址等)放在apollo配置中心的时候是不行的,他不会做任何事情,但是把配置放在application.properties的时候是可以的,是不是因为apollo的配置的获取时间在dubbo的服务发现和注册之后导致的呢

nobodyiam commented 6 years ago

和dubbo的集成之前不少人用过的,应该是没问题的,建议看一下日志,确定一下是否配置根本就没加载下来。

anymijun commented 6 years ago

我也相同碰到这个问题,把apollo的配置放到本地application.properties是没有问题的,但从apollo配置中心去拉取数据,定义的端口数据都正确拿到,但dubbo的相关配置,例如,注册中心的地址,扫描包的路径,都拿不到.看日志只有加载apollo的日志信息,无其它dubbo相关的日志输出.

nobodyiam commented 6 years ago

要不提供个demo项目我们看一下吧。

anymijun commented 6 years ago

@nobodyiam 试了几次还是不行,我上传了一个示例,地址:https://github.com/anymijun/springboot-dubbo-demo 麻烦帮忙看看,非常感谢.

nobodyiam commented 6 years ago

@anymijun 看了一下,是因为你使用的这个spring-boot-starter-dubbo在启动阶段就从env中读取配置了,所以你需要使用apollo的bootstrap阶段注入配置功能

简单而言,如果你的配置都是放在application这个namespace下的话,那么只需要在项目中application.properties中增加一行如下配置即可,我本地测试是OK的。

apollo.bootstrap.enabled=true
tangzhenhuang commented 6 years ago

没回来看这个评论-m-其实后来我调试了一下,在dubbo的服务提供注册和服务消费注册的关键代码打了断点,发现当配置在application.peoperites中时,启动工程的时候注册过程是正常执行的,但是放在apollo之后,注册的关键代码是不执行的。这就意味着dubbo的服务和消费的注册过程是在读取apollo配置之前,但是却在读取application.properties之后(实际上application.properties和apollo配置读取的顺序也是是这样的先后顺序),后来我就用了apollo的bootstrap阶段注入配置功能,就如上面所说,在项目中application.properties加入apollo.bootstrap.enabled=true,也行不通,对了,apollo用的是0.10.0,dubbo是2.8.5(好像也叫dubbox?忘记了)改天再把dubbo部分整理成demo发一下吧-m-正考虑换springcloud了-m-

anymijun commented 6 years ago

@nobodyiam 非常感谢,之前采用这种方式配置过,但发现没生效,今天清理了缓存,并重新clean install ,发现可以了.非常感谢... @ab91963931372 我这边也是采用dubbo的2.8.5版本,目前是正常的了.谢谢

nobodyiam commented 6 years ago

@anymijun @ab91963931372 0.10.0正式release版本是提供了bootstrap阶段注入配置功能的,你们之前可能用的是0.10.0-SNAPSHOT版本吧?

steveguoshao commented 6 years ago

用的0.10.2版本,在application.properties里面(不能在bootstrap.properties)增加了apollo.bootstrap.enabled=true dubbo还是无法扫描进来

steveguoshao commented 6 years ago

我用我的方法解决了,参考了spring-cloud-config-client的BootstrapApplicationListener,在ApolloApplicationContextInitializer类上增加了@Order(Ordered.HIGHEST_PRECEDENCE),把优先级调整到最高,@nobodyiam 希望参考一下spring-cloud-config-client优化一下吧

BossYi commented 6 years ago

一样的问题,加了apollo.bootstrap.enabled=true 还是不行。

liliang8858 commented 6 years ago

还是不行呀

BossYi commented 6 years ago

@liliang8858 可以参考这个问题,https://github.com/ctripcorp/apollo/issues/1184

liliang8858 commented 6 years ago

@BossYi 你已经解决了?

BossYi commented 6 years ago

@liliang8858 建议使用xml配置Dubbo,注入和注册服务用注解,不会有问题

liliang8858 commented 6 years ago

image @BossYi 这样配置吗?

BossYi commented 6 years ago

@liliang8858 http://dubbo.apache.org/books/dubbo-user-book/configuration/xml.html 参考文档

nobodyiam commented 6 years ago

@liliang8858

spring boot dubbo和apollo结合的使用可以参考 https://github.com/ctripcorp/apollo-use-cases/tree/master/spring-boot-dubbo

steveguoshao commented 6 years ago

加了apollo.bootstrap.enabled=true 还是不行看下依赖,具体参考这里:https://github.com/ctripcorp/apollo/issues/1102

nobodyiam commented 6 years ago

1102 已经解决,原因是使用了非dubbo官方的starter所致。

case先关闭了,如还有问题,可以提供更多信息,或进群交流。

SymonLin commented 6 years ago

我也出现这个问题了 看日志是dubbo加载配置在apollo拉取配置之前 导致dubbo的配置项都无效 @nobodyiam 帮忙看看呗 [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'.