Apollo、RocketMQ加载顺序问题

这篇具有很好参考价值的文章主要介绍了Apollo、RocketMQ加载顺序问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Apollo、RocketMQ加载顺序问题,Java,java,spring cloud

在SpringCloudAlibaba框架中,因Nacos配置中心管理权限过于简单,决定用Apollo代替Nacos配置中心,但在启动时,Nacos、Redis等配置读取正常,RocketMQ由于启动过早,无法从Apollo读取自己的服务地址配置。

报错如下:

Error processing condition on RocketMQAutoConfiguration.

Apollo、RocketMQ加载顺序问题,Java,java,spring cloud

针对此问题,进行以下3个方向的尝试,最开始觉得如果其他组件能正常读取Apollo配置,那应该是RocketMQ的问题,想办法降低它的加载顺序。最终发现不太现实,在RocketMQ社区也未找到相关问题。

尝试1.让rocketmq-spring-boot中的RocketMQAutoConfiguration延迟加载-失败

最起码要晚于ApolloAutoConfiguration。

Apollo、RocketMQ加载顺序问题,Java,java,spring cloud

如下方案失败:

/**
 * 试图让RocketMQAutoConfiguration在ApolloAutoConfiguration之后加载
 */
@Configuration
@AutoConfigureBefore(RocketMQAutoConfiguration.class)
public class OrderConfiguration {
    @Bean
    @ConditionalOnMissingBean(ApolloAutoConfiguration.class)
    public ApolloAutoConfiguration apolloAutoConfiguration() {
        return new ApolloAutoConfiguration();
    }
}

尝试2:开启全局懒加载,并排除Apollo-失败

Apollo、RocketMQ加载顺序问题,Java,java,spring cloud

尝试3:修改EnableApolloConfig order属性-失败

在启动类修改EnableApolloConfig order属性,还是报同样的错误。

Apollo、RocketMQ加载顺序问题,Java,java,spring cloud

@EnableApolloConfig(order = Integer.MIN VALUE)

解决方案:设置apollo更早阶段注入

直到忙活几个小时后,发现Apollo官方已经提供了容Apollo更早注入的方法,解决方法:

@SpringBootApplication
// 允许使用Feign客户端发送请求
@EnableFeignClients
// 指定要扫描的Mapper类的包的路径
@MapperScan("com.**.dao")
@EnableRedis
@EnableApolloConfig
// 扫描加载Filter
@ServletComponentScan
public class Application {
    public static void main(String[] args) {
        // 启用apollo配置开关 在应用启动阶段是否向Spring容器注入被托管的properties文件配置信息。
        System.setProperty("apollo.bootstrap.enabled","true");
        // 将Apollo配置加载提到初始化日志系统之前。
        System.setProperty("apollo.bootstrap.eagerLoad.enabled","true");

        SpringApplication.run(Application.class, args);
    }
}

还有另一种方式:

Apollo官方文档

Apollo

Spring Boot除了支持上述两种集成方式以外,还支持通过application.properties/bootstrap.properties来配置,该方式能使配置在更早的阶段注入,比如使用@ConditionalOnProperty的场景或者是有一些spring-boot-starter在启动阶段就需要读取配置做一些事情(如dubbo-spring-boot-project),所以对于Spring Boot环境建议通过以下方式来接入Apollo(需要0.10.0及以上版本)。
从1.2.0版本开始,如果希望把日志相关的配置(如logging.level.root=info或logback-spring.xml中的参数)也放在Apollo管理,那么可以额外配置apollo.bootstrap.eagerLoad.enabled=true来使Apollo的加载顺序放到日志系统加载之前,不过这会导致Apollo的启动过程无法通过日志的方式输出(因为执行Apollo加载的时候,日志系统压根没有准备好呢!所以在Apollo代码中使用Slf4j的日志输出便没有任何内容),更多信息可以参考PR 1614。参考配置示例如下:
# will inject 'application' namespace in bootstrap phase
apollo.bootstrap.enabled = true
# put apollo initialization before logging system initialization
apollo.bootstrap.eagerLoad.enabled=true

        因为搜索方向不对浪费了几个小时,一开始一直在搜索如何让RocketMQ加载晚于Apollo,重点在调整两者加载顺序上,后来又在研究RocketMQAutoConfiguration的加载原理,尝试各种方法让RMQ延迟加载,最后随便搜了一下Apollo加载顺序,答案其实很多,在解决问题时还是要多扩散一下思路。


 文章来源地址https://www.toymoban.com/news/detail-537963.html

到了这里,关于Apollo、RocketMQ加载顺序问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【合集】Spring Cloud 组件——架构进化史话 & Eureka,Nacos,Apollo,OpenFeign,Ribbon,Sentinel,Gateway ,Seata+事务. . .

    Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,集群状态)。 注意: 首先,尽管Spring Cloud带有“Cloud”这个单词,但它并不是云计算解

    2024年02月03日
    浏览(72)
  • Spring Cloud微服务架构组件【Java培训】

    SpringCloud是一系列框架的有序集合,为开发人员构建微服务架构提供了完整的解决方案。Spring Cloud根据分布式服务协调治理的需求成立了许多子项目,每个项目通过特定的组件去实现,下面我们讲解一下Spring Cloud 包含的常用组件以及模块。 (1)Spring Cloud Config:分布式配置中心

    2023年04月25日
    浏览(28)
  • 【1.3】Java微服务:Spring Cloud版本说明

    ✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏: 微服务 ✨特色专栏: 知识分享 🥭本文内容:【1.3】Java微服务:Spring Cloud版本说明 📚 **ps***  : 阅读这篇文章如果有问题或

    2024年02月12日
    浏览(25)
  • 企业电子招标采购系统源码java 版本 Spring Cloud + Spring Boot

       项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要求;通过电子化

    2024年02月11日
    浏览(40)
  • Java版企业工程项目管理系统源码+java版本+项目模块功能清单+spring cloud +spring boot

          工程项目各模块及其功能点清单 一、系统管理     1、数据字典:实现对数据字典标签的增删改查操作     2、编码管理:实现对系统编码的增删改查操作     3、用户管理:管理和查看用户角色     4、菜单管理:实现对系统菜单的增删改查操作     5、角色管理:

    2024年02月16日
    浏览(35)
  • 详解Java Chassis 3与Spring Cloud的互操作

    本文分享自华为云社区《Java Chassis 3技术解密:与Spring Cloud的互操作》,作者: liubao68。 Java Chassis 3一个很重要的设计原则:利用架构的韧性设计来解决兼容性问题。 比如通过引入微服务网关,来解决不同语言、不同框架、遗留系统之间的互操作问题。 本文在这个架构原则基

    2024年04月10日
    浏览(39)
  • Java版Spring Cloud+Spring Boot+Mybatis+uniapp知识付费平台讲解

    提供私有化部署,免费售后,专业技术指导,支持PC、APP、H5、小程序多终端同步,支持二次开发定制,源码交付。   Java版知识付费-轻松拥有知识付费平台 多种直播形式,全面满足直播场景需求 公开课、小班课、独立直播间等类型,满足讲师个性化直播场景需求;低延迟、

    2024年02月16日
    浏览(36)
  • Java企业工程项目管理系统+spring cloud 系统管理+java 系统设置+二次开发

        工程项目各模块及其功能点清单 一、系统管理     1、数据字典:实现对数据字典标签的增删改查操作     2、编码管理:实现对系统编码的增删改查操作     3、用户管理:管理和查看用户角色     4、菜单管理:实现对系统菜单的增删改查操作     5、角色管理:管理

    2024年02月03日
    浏览(44)
  • Java版spring cloud 本工程项目管理系统源码

        ​ ​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈,内卷严重,发展趋势呈现两极分化,中小微企业的生存空间

    2024年02月15日
    浏览(31)
  • Java(spring cloud)智慧工地(项目层+工地层+APP)源码

    智慧工地提供工地智能管理服务,打通数据壁垒,互通管理中心各平台。实现:“可视”、“可控”、“可管”。智慧工地管理云平台是一种利用人工智能和物联网技术来监测和管理建筑工地的系统。它可以通过感知设备、数据处理和分析、智能控制等技术手段,实现对工地

    2024年02月21日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包