SpringCloud 无法自动装配 RocketMQTemplate

1,445 阅读1分钟

解决 springboot项目启动不了, @Autowired 注入错误

@Autowired
private RocketMQTemplate rocketMQTemplate;

第一种解决方式:更新依赖

以前的依赖

<!--RocketMQ相关-->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <!--        <version>2.0.0</version>-->
            <version>2.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-common</artifactId>
            <version>4.5.1</version>
        </dependency>

更改 rocketmq-spring-boot-starter 的 version 为 2.1.0

   <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <!--        <version>2.0.0</version>-->
            <version>2.1.0</version>
  </dependency>

大功告成

第二种解决方式:添加自定义配置bean

@Configuration
public class RocketMqConfig {
    @Value("${rocketmq.producer.group}")
    private String producerGroup;

    @Value("${rocketmq.name-server}")
    private String nameServer;

    /**
     * 由于使用的Spring版本是3.0.0以上,与rocketMq不是很兼容,对于rocketMqTemplate
     * 的自动注入存在差异,如果不采用这种方式注入则会报出缺少bean的信息
     */
    @Bean("RocketMqTemplate")
    public RocketMQTemplate rocketMqTemplate(){
        RocketMQTemplate rocketMqTemplate = new RocketMQTemplate();
        DefaultMQProducer defaultMqProducer = new DefaultMQProducer();
        defaultMqProducer.setProducerGroup(producerGroup);
        defaultMqProducer.setNamesrvAddr(nameServer);
        rocketMqTemplate.setProducer(defaultMqProducer);
        return rocketMqTemplate;
    }
}