美文网首页
rocketmq-spring-starter结合disconf

rocketmq-spring-starter结合disconf

作者: 红泥小火炉_e8a5 | 来源:发表于2019-11-27 20:04 被阅读0次

    项目中要用到rocketmq,想要封装一个方便使用的client,网上搜索到官方的一个项目:

    https://github.com/apache/rocketmq-spring
    

    简单写了demo测试了下,感觉用起来接近rabbitmq,决定在实际项目里测试下。
    disconf配置如下:

    rocketmq.name-server=127.0.0.1:9876
    rocketmq.producer.group=test-group
    

    实际测试结果RocketMQTemplate无法初始化,网上查了不少资料没有结果。

    翻阅rocketmq-spring-boot的源码,RocketMQTemplate由
    RocketMQAutoConfiguration内完成初始化,
    观察到该类使用了以下注解:

    @ConditionalOnProperty(prefix = "rocketmq", value = "name-server", matchIfMissing = true)
    @ConditionalOnProperty(prefix = "rocketmq", value = {"name-server", "producer.group"})
    

    两个注解在RocketMQTemplate、RocketMQAutoConfiguration初始化之前判断配置文件里是否有必须的配置项。

    具体判断实现类:

    @Order(-2147483608)
    org.springframework.boot.autoconfigure.condition.OnPropertyCondition
    

    debug分析,OnPropertyCondition初始化完成时没有读到disconf配置项,
    猜测是@Order(-2147483608)导致的,考虑去掉ConditionalOnProperty的检查。
    自行修改RocketMQAutoConfiguration,重新打包后,果然可以初始化了。

    这样修改也带来了一些缺点,一些纯粹的Consumer应用内也初始化了RocketMQTemplate,而这是不必要的,后续可以再自行实现org.springframework.context.annotation.Condition优化下。

    使用的版本:

    rocketmq-client 4.5.2
    rocketmq-spring-starter 2.0.5-SNAPSHOT
    

    相关文章

      网友评论

          本文标题:rocketmq-spring-starter结合disconf

          本文链接:https://www.haomeiwen.com/subject/tvsmwctx.html