赞
踩
Springboot和MQ的服务安装这里就不多介绍了。
1、pom文件添加依赖
<!-- rocketmq依赖 -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.3</version>
</dependency>
2、配置yml信息(注意行缩进格式)
rocketmq:
name-server: localhost:9876 # mq地址
producer:
group: Dev\_Group # 必须指定group
send-message-timeout: 3000 # 消息发送超时时长,默认3s
retry-times-when-send-failed: 3 # 同步发送消息失败重试次数,默认2
retry-times-when-send-async-failed: 3 # 异步发送消息失败重试次数,默认2
customized-trace-topic: TEST\_\_TOPIC
3、启动遇到问题
依赖和yml配置都写好之后,启动项目,看到报错信息:
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
APPLICATION FAILED TO START
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
Description:
Field rocketMQTemplate in com.spt.message.service.MqProducerService required a bean of type 'org.apache.rocketmq.spring.core.RocketMQTemplate' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'org.apache.rocketmq.spring.core.RocketMQTemplate' in your configuration.
尝试了很多办法都没有解决这个问题,又不想降低SpringBoot的版本。各方查找资料。
最终在github中RocketMQ的官方项目中找到一篇issue解决了这个问题。
https://github.com/apache/rocketmq-spring/pull/541
导致这个问题的原因是:
Springboot-3.0已经放弃了spring.plants自动装配,它被/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
所取代,添加这个文件是为了兼容。
所以,在resources下创建META-INF,然后在META-INF下创建文件:org.springframework.boot.autoconfigure.AutoConfiguration.imports
在org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件中加入内容:
org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration
新建RocketMQ的配置文件,如下:
@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; } }
问题得以解决!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。