Spring ActiveMQ 整合(二.1): 重发机制概念解释

本文解释了ActiveMQ中的消息重发(ReDelivery)机制,当消费者处理消息时遇到异常,消息会重新投递。超过重试次数则进入死信队列(DLQ)。消息重发实际是指消息的重新消费。示例展示了不同重发情况,强调此机制针对消费者而非生产者。

前言:

好多人问我,根据我的教程,他怎么不能实现消息重复。不是说他们不能实现消息重发,只是对MQ的这个消息重发概念有误解。

一、消息重发的解释:

下面我解释一下,我对这个概念的解读:

     ActiveMQ实现了这一功能,叫做ReDelivery(重新投递)。

    当消费者在处理消息时有异常发生,会将消息重新放回Queue里,进行下一次处       理。当超过重试次数时,消息会被放置到一个特殊的Queue中,即Dead Letter Queue,简称DLQ,用于进行后续分析。

也就是说:消息重发,是对消费者而言的,也就是重新消费,重新投递。

 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2025-09-03 10:38:09.880 [main] ERROR org.springframework.boot.SpringApplication:860 - Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'activeMQConfig': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.activemq.user' in value "${spring.activemq.user}" at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:771) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:763) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438) at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1318) at com.hopedove.bsd.bas.BASApplication.main(BASApplication.java:19) Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.activemq.user' in value "${spring.activemq.user}" at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:180) at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239) at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:936) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1321) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ... 18 common frames omitted 2025-09-03 10:38:09.884 [Thread-2] WARN com.alibaba.nacos.common.http.HttpClientBeanHolder:108 - [HttpClientBeanHolder] Start destroying common HttpClient 2025-09-03 10:38:09.886 [Thread-2] WARN com.alibaba.nacos.common.http.HttpClientBeanHolder:114 - [HttpClientBeanHolder] Destruction of the end
最新发布
09-04
Spring Boot应用启动时出现 `Could not resolve placeholder 'spring.activemq.user' in value '${spring.activemq.user}'` 错误,通常是因为Spring无法在配置文件中找到对应的属性值。以下是几种可能的解决办法: #### 检查Maven配置 若为Maven项目,可点击IDEA相关选项查看配置情况。若点击IDEA对应位置后,特定区域没有显示相关内容,可分别点击另外两个按钮查看是否出现。若仍没有,可在 `pom.xml` 文件里右击,尝试重新引入依赖;若没有相应按钮,会看到提示添加此项目为Maven项目的按钮,点击即可 [^4]。 #### 检查环境配置 若Spring包含多个环境配置 `properties` 文件,只修改 `application.properties` 里的 `spring.profiles.active` 是不够的。还需在IDEA的Maven选项中勾选相应环境,重新进行 `clean`、`install` 操作。若使用指令运行,则要添加 `mvn` 参数指定环境,例如 `mvn clean package -Pprod` [^2]。 #### 检查配置文件格式 要保证配置文件里,配置的地址与上一个地址间隔一行。若这样操作后仍有问题,可使用配置占位符的终极解决方案 [^3]。 ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; @Configuration public class AppConfig { @Bean public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { PropertySourcesPlaceholderConfigurer placeholderConfigurer = new PropertySourcesPlaceholderConfigurer(); placeholderConfigurer.setIgnoreUnresolvablePlaceholders(true); return placeholderConfigurer; } } ``` #### 检查配置文件是否存在及属性是否正确 要确保 `application.properties` 或者 `application.yml` 文件存在,并且其中包含 `spring.activemq.user` 属性。 `application.properties` 示例: ```properties spring.activemq.user=your_username ``` `application.yml` 示例: ```yaml spring: activemq: user: your_username ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值