SpringBoot集成ActiveMQ异常处理机制:若未捕获异常,消息会被重新投递

一、问题描述

SpringBoot项目集成AvtiveMQ,作为消息消费者。如果在消费消息的方法中,抛出异常,会产生什么效果?

二、ActiveMQ异常处理机制(AI问答仅供参考)

在Spring Boot项目集成ActiveMQ作为消息消费者时,若消费方法抛出异常,其效果主要取决于消息监听容器的配置及ActiveMQ的重试策略。以下是具体的影响和机制:

1. 默认行为(无事务配置)

  • 消息重试:若未捕获异常,消息会被重新投递。ActiveMQ默认的RedeliveryPolicy允许最多6次重试(可通过配置调整)。每次重试间隔由redeliveryDelay决定(默认为1秒)。
  • 死信队列(DLQ):超过最大重试次数后,消息会被移至死信队列(默认名称:ActiveMQ.DLQ),避免无限循环。若未配置DLQ,消息可能被丢弃或无限重试(取决于具体配置)。

2. 事务配置的影响

  • 开启事务(sessionTransacted=true:若消费方法抛出异常,事务会回滚,消息重新入队,触发重试逻辑。同样受ActiveMQ的RedeliveryPolicy限制。
  • 外部事务管理器:若使用如JmsTransactionManager,异常同样触发回滚,消息未被确认,重新投递。

3. 确认模式(Acknowledge Mode)

  • 自动确认(AUTO_ACKNOWLEDGE):仅在方法成功执行后确认消息。若抛出异常,消息未被确认,触发重试。默认情况下,Spring Boot使用auto-acknowledge模式。这意味着:如果消费者成功处理消息(未抛出异常),消息会被自动确认并从队列中移除。
  • 客户端确认(CLIENT_ACKNOWLEDGE):需手动调用message.acknowledge()。若未确认,消息重新投递。

4. 自定义错误处理

  • 实现ErrorHandler:可捕获异常并自定义逻辑(如记录日志、转发到特定队列)。
  • 重试策略调整:通过ActiveMQ的RedeliveryPolicy配置最大重试次数、重试间隔等。

5. 消息幂等性

  • 重复消费风险:因消息可能多次投递,消费者需设计为幂等(如通过唯一ID去重),避免重复处理。

示例配置调整

  • ActiveMQ重试策略(在application.properties):
    spring.activemq.redeliveryPolicy.maximumRedeliveries=3
    spring.activemq.redeliveryPolicy.initialRedeliveryDelay=5000
    
  • Spring事务配置
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerFactory(ConnectionFactory connectionFactory) {DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setSessionTransacted(true); // 开启事务return factory;
    }
    

总结

  • 异常导致重试:消息会重新入队,直到达到最大重试次数。
  • 死信队列:超过重试次数后,消息进入DLQ,需后续处理。
  • 配置关键点:事务、确认模式、重试策略共同决定异常处理逻辑。
  • 最佳实践:结合事务管理、合理设置重试策略,并确保消费逻辑幂等。

通过合理配置,可有效管理异常场景,避免消息丢失或无限循环,保障消息系统的可靠性。

三、测试实例

项目依赖、环境配置与核心代码

POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.4</version><relativePath/></parent><groupId>com.example</groupId><artifactId>hello-activemq</artifactId><version>0.0.1-SNAPSHOT</version><name>hello-activemq</name><description>Demo project for Spring Boot</description><properties><java.version>21</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></path></annotationProcessorPaths></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

YAML

spring:application:name: hello-activemqactive-mq:broker-url: tcp://localhost:61616user: adminpassword: admin

Application

package com.example.hello.activemq;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class HelloActivemqApplication {public static void main(String[] args) {SpringApplication.run(HelloActivemqApplication.class, args);}}

创建消息监听器

创建一个监听器类,使用@JmsListener注解监听队列,模拟特定条件下抛出异常。

package com.example.hello.activemq.consumer;import com.example.hello.activemq.model.CalculationTaskMessage;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;import java.time.LocalDate;/*** 计算任务消费者*/
@Slf4j
@Component
@RequiredArgsConstructor
public class CalculationTaskQueueConsumer {private final ObjectMapper objectMapper;@JmsListener(destination = "calculation-task-queue")private void receive(String message) throws JsonProcessingException {log.info("计算任务队列消费者,接收消息: {}", message);CalculationTaskMessage calculationTaskMessage = objectMapper.readValue(message, CalculationTaskMessage.class);log.info("计算任务队列消费者,解析消息对象: {}", calculationTaskMessage);// 模拟特定条件下抛出异常LocalDate localDate = LocalDate.of(2025, 1, 1);if (localDate.equals(calculationTaskMessage.getDate())) {log.info("计算日期为非交易日(元旦),计算日期:{}", localDate);throw new RuntimeException("计算日期为非交易日(元旦)");}log.info("计算任务队列消费者,消息处理完成");}}

实体类

package com.example.hello.activemq.model;import lombok.Data;import java.time.LocalDate;/*** 计算任务消息*/
@Data
public class CalculationTaskMessage {/*** 任务主键*/private Integer id;/*** 任务编号*/private String taskCode;/*** 任务名称*/private String taskName;/*** 计算账号*/private String account;/*** 计算日期*/private LocalDate date;}

运行效果

发送消息(模拟特定条件下抛出异常)

通过ActiveMQ控制台发送消息

JSON字符串
{"id": 1,"taskCode": "123456-20250101-20250408013653","taskName": "计算任务-123456-20250101-20250408013653","account": "123456","date": "2025-01-01"
}

抛出异常会重试多次(默认6次)

消息重试:若未捕获异常,消息会被重新投递。

2025-04-09T00:07:48.640+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,接收消息: {"id": 1,"taskCode": "123456-20250101-20250408013653","taskName": "计算任务-123456-20250101-20250408013653","account": "123456","date": "2025-01-01"
}
2025-04-09T00:07:49.008+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,解析消息对象: CalculationTaskMessage(id=1, taskCode=123456-20250101-20250408013653, taskName=计算任务-123456-20250101-20250408013653, account=123456, date=2025-01-01)
2025-04-09T00:07:49.010+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算日期为非交易日(元旦),计算日期:2025-01-01
2025-04-09T00:07:49.065+08:00  WARN 9392 --- [hello-activemq] [ntContainer#0-1] o.s.j.l.DefaultMessageListenerContainer  : Execution of JMS message listener failed, and no ErrorHandler has been set.org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method 'private void com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(java.lang.String) throws com.fasterxml.jackson.core.JsonProcessingException' threw exceptionat org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:118) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:84) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:790) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:747) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:725) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:333) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:270) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1420) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1410) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1287) ~[spring-jms-6.2.5.jar:6.2.5]at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
Caused by: java.lang.RuntimeException: 计算日期为非交易日(元旦)at com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(CalculationTaskQueueConsumer.java:34) ~[classes/:na]at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:110) ~[spring-jms-6.2.5.jar:6.2.5]... 10 common frames omitted2025-04-09T00:07:50.067+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,接收消息: {"id": 1,"taskCode": "123456-20250101-20250408013653","taskName": "计算任务-123456-20250101-20250408013653","account": "123456","date": "2025-01-01"
}
2025-04-09T00:07:50.068+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,解析消息对象: CalculationTaskMessage(id=1, taskCode=123456-20250101-20250408013653, taskName=计算任务-123456-20250101-20250408013653, account=123456, date=2025-01-01)
2025-04-09T00:07:50.069+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算日期为非交易日(元旦),计算日期:2025-01-01
2025-04-09T00:07:50.087+08:00  WARN 9392 --- [hello-activemq] [ntContainer#0-1] o.s.j.l.DefaultMessageListenerContainer  : Execution of JMS message listener failed, and no ErrorHandler has been set.org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method 'private void com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(java.lang.String) throws com.fasterxml.jackson.core.JsonProcessingException' threw exceptionat org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:118) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:84) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:790) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:747) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:725) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:333) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:270) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1420) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1410) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1287) ~[spring-jms-6.2.5.jar:6.2.5]at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
Caused by: java.lang.RuntimeException: 计算日期为非交易日(元旦)at com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(CalculationTaskQueueConsumer.java:34) ~[classes/:na]at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:110) ~[spring-jms-6.2.5.jar:6.2.5]... 10 common frames omitted2025-04-09T00:07:51.087+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,接收消息: {"id": 1,"taskCode": "123456-20250101-20250408013653","taskName": "计算任务-123456-20250101-20250408013653","account": "123456","date": "2025-01-01"
}
2025-04-09T00:07:51.088+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,解析消息对象: CalculationTaskMessage(id=1, taskCode=123456-20250101-20250408013653, taskName=计算任务-123456-20250101-20250408013653, account=123456, date=2025-01-01)
2025-04-09T00:07:51.089+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算日期为非交易日(元旦),计算日期:2025-01-01
2025-04-09T00:07:51.103+08:00  WARN 9392 --- [hello-activemq] [ntContainer#0-1] o.s.j.l.DefaultMessageListenerContainer  : Execution of JMS message listener failed, and no ErrorHandler has been set.org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method 'private void com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(java.lang.String) throws com.fasterxml.jackson.core.JsonProcessingException' threw exceptionat org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:118) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:84) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:790) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:747) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:725) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:333) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:270) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1420) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1410) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1287) ~[spring-jms-6.2.5.jar:6.2.5]at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
Caused by: java.lang.RuntimeException: 计算日期为非交易日(元旦)at com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(CalculationTaskQueueConsumer.java:34) ~[classes/:na]at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:110) ~[spring-jms-6.2.5.jar:6.2.5]... 10 common frames omitted2025-04-09T00:07:52.106+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,接收消息: {"id": 1,"taskCode": "123456-20250101-20250408013653","taskName": "计算任务-123456-20250101-20250408013653","account": "123456","date": "2025-01-01"
}
2025-04-09T00:07:52.107+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,解析消息对象: CalculationTaskMessage(id=1, taskCode=123456-20250101-20250408013653, taskName=计算任务-123456-20250101-20250408013653, account=123456, date=2025-01-01)
2025-04-09T00:07:52.108+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算日期为非交易日(元旦),计算日期:2025-01-01
2025-04-09T00:07:52.146+08:00  WARN 9392 --- [hello-activemq] [ntContainer#0-1] o.s.j.l.DefaultMessageListenerContainer  : Execution of JMS message listener failed, and no ErrorHandler has been set.org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method 'private void com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(java.lang.String) throws com.fasterxml.jackson.core.JsonProcessingException' threw exceptionat org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:118) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:84) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:790) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:747) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:725) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:333) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:270) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1420) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1410) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1287) ~[spring-jms-6.2.5.jar:6.2.5]at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
Caused by: java.lang.RuntimeException: 计算日期为非交易日(元旦)at com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(CalculationTaskQueueConsumer.java:34) ~[classes/:na]at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:110) ~[spring-jms-6.2.5.jar:6.2.5]... 10 common frames omitted2025-04-09T00:07:53.147+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,接收消息: {"id": 1,"taskCode": "123456-20250101-20250408013653","taskName": "计算任务-123456-20250101-20250408013653","account": "123456","date": "2025-01-01"
}
2025-04-09T00:07:53.148+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,解析消息对象: CalculationTaskMessage(id=1, taskCode=123456-20250101-20250408013653, taskName=计算任务-123456-20250101-20250408013653, account=123456, date=2025-01-01)
2025-04-09T00:07:53.149+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算日期为非交易日(元旦),计算日期:2025-01-01
2025-04-09T00:07:53.179+08:00  WARN 9392 --- [hello-activemq] [ntContainer#0-1] o.s.j.l.DefaultMessageListenerContainer  : Execution of JMS message listener failed, and no ErrorHandler has been set.org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method 'private void com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(java.lang.String) throws com.fasterxml.jackson.core.JsonProcessingException' threw exceptionat org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:118) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:84) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:790) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:747) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:725) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:333) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:270) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1420) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1410) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1287) ~[spring-jms-6.2.5.jar:6.2.5]at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
Caused by: java.lang.RuntimeException: 计算日期为非交易日(元旦)at com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(CalculationTaskQueueConsumer.java:34) ~[classes/:na]at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:110) ~[spring-jms-6.2.5.jar:6.2.5]... 10 common frames omitted2025-04-09T00:07:54.179+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,接收消息: {"id": 1,"taskCode": "123456-20250101-20250408013653","taskName": "计算任务-123456-20250101-20250408013653","account": "123456","date": "2025-01-01"
}
2025-04-09T00:07:54.180+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,解析消息对象: CalculationTaskMessage(id=1, taskCode=123456-20250101-20250408013653, taskName=计算任务-123456-20250101-20250408013653, account=123456, date=2025-01-01)
2025-04-09T00:07:54.181+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算日期为非交易日(元旦),计算日期:2025-01-01
2025-04-09T00:07:54.196+08:00  WARN 9392 --- [hello-activemq] [ntContainer#0-1] o.s.j.l.DefaultMessageListenerContainer  : Execution of JMS message listener failed, and no ErrorHandler has been set.org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method 'private void com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(java.lang.String) throws com.fasterxml.jackson.core.JsonProcessingException' threw exceptionat org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:118) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:84) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:790) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:747) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:725) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:333) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:270) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1420) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1410) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1287) ~[spring-jms-6.2.5.jar:6.2.5]at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
Caused by: java.lang.RuntimeException: 计算日期为非交易日(元旦)at com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(CalculationTaskQueueConsumer.java:34) ~[classes/:na]at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:110) ~[spring-jms-6.2.5.jar:6.2.5]... 10 common frames omitted2025-04-09T00:07:55.197+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,接收消息: {"id": 1,"taskCode": "123456-20250101-20250408013653","taskName": "计算任务-123456-20250101-20250408013653","account": "123456","date": "2025-01-01"
}
2025-04-09T00:07:55.198+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算任务队列消费者,解析消息对象: CalculationTaskMessage(id=1, taskCode=123456-20250101-20250408013653, taskName=计算任务-123456-20250101-20250408013653, account=123456, date=2025-01-01)
2025-04-09T00:07:55.198+08:00  INFO 9392 --- [hello-activemq] [ntContainer#0-1] c.e.h.a.c.CalculationTaskQueueConsumer   : 计算日期为非交易日(元旦),计算日期:2025-01-01
2025-04-09T00:07:55.254+08:00  WARN 9392 --- [hello-activemq] [ntContainer#0-1] o.s.j.l.DefaultMessageListenerContainer  : Execution of JMS message listener failed, and no ErrorHandler has been set.org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method 'private void com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(java.lang.String) throws com.fasterxml.jackson.core.JsonProcessingException' threw exceptionat org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:118) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:84) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:790) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:747) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:725) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:333) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:270) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1420) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1410) ~[spring-jms-6.2.5.jar:6.2.5]at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1287) ~[spring-jms-6.2.5.jar:6.2.5]at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
Caused by: java.lang.RuntimeException: 计算日期为非交易日(元旦)at com.example.hello.activemq.consumer.CalculationTaskQueueConsumer.receive(CalculationTaskQueueConsumer.java:34) ~[classes/:na]at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-6.2.5.jar:6.2.5]at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:110) ~[spring-jms-6.2.5.jar:6.2.5]... 10 common frames omitted

ActiveMQ控制台队列页面

初始状态

抛出异常会重试多次后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java学习笔记】random的使用

random使用方法 使用说明&#xff1a;返回的是(0<n<1)这个范围中的任意带正号的double值 代码实例 public class helloworld{public static void main(String[] args){System.out.println(Math.random());} }生成0-100中的任意数代码示例 public class Main {public …

(三)垂直分库架构、分布式数据库

文章目录 垂直分库架构/分布式数据库什么是垂直分库架构架构模型优缺点优点缺点 技术案例分布式数据库架构模型优缺点优点缺点 技术案例 垂直分库架构/分布式数据库 什么是垂直分库架构 根据业务的模块划分&#xff0c; 将不同业务的数据放到不同的数据库中。 比如一个电子商城…

数据结构线性表的顺序存储结构

线性表是由零个或多个数据元素组成的有序序列。 特点&#xff1a; 数据元素间是有顺序的&#xff1b; 数据元素的个数是有限的&#xff1b; 一般来说&#xff0c;数据元素的类型是相同的&#xff08;强类型语言&#xff09;。c/c是强类型语言&#xff0c;必须指定数据类型。…

扣子空间试用:生成五一骑行规划+notion文章编写

今天试用了一下扣子空间&#xff0c;正好五一快到了&#xff0c;让它帮忙做了五一骑行规划&#xff0c;效果不赖&#xff01; 生成五一骑行规划 点击前往网站查看效果 prompt 如下&#xff1a; 帮我做一个五一上海骑行规划 要求&#xff1a; - 风景优美 - 人少 - 100km总路程…

最新得物小程序sign签名加密,请求参数解密,响应数据解密逆向分析

点击精选&#xff0c;出现https://app.dewu.com/api/v1/h5/index/fire/index 这个请求 直接搜索sign的话不容易定位 直接搜newAdvForH5就一个&#xff0c;进去再搜sign&#xff0c;打上断点 可以看到t.params就是没有sign的请求参数&#xff0c; 经过Object(a.default)该函数…

在C#串口通信中,一发一收的场景,如何处理不同功能码的帧数据比较合理,代码结构好

在 C# 串口通信的一发一收场景里&#xff0c;处理不同功能码的帧数据可采用以下合理的代码结构&#xff0c;它能让代码更具可读性、可维护性和可扩展性。 实现思路 定义帧结构&#xff1a;创建一个类来表示通信帧&#xff0c;其中包含功能码、数据等信息。功能码处理逻辑&…

【C++】vector扩容缩容

vector扩容缩容 1 扩容 一般来说&#xff0c;主要是重新分配内存 2 缩容 resize 缩小后&#xff0c;vector 的容量&#xff08;capacity()&#xff09;可能保持不变&#xff0c;需要显式调用 shrink_to_fit() 来释放内存。 验证代码&#xff1a; #include <vector>…

java中,线程的执行状态有哪些

在 Java 里&#xff0c;线程有 6 种执行状态&#xff0c;这些状态都在 java.lang.Thread.State 枚举类中被定义。下面为你详细介绍这些状态&#xff1a; 1. NEW&#xff08;新建状态&#xff09; 当你创建了一个 Thread 对象&#xff0c;却还未调用其 start() 方法时&#xf…

MATLAB 控制系统设计与仿真 - 41

鲁棒控制的其他函数 - 回路成型函数 loopsyn 灵敏度问题由鲁棒控制工具箱中的loopsyn就可以直接求解,该函数采用H无穷回路成型算法设计控制器,函数的调用格式为: [K,CL,gamma,info] = loopsyn(G,Gd) % G为受控对象模型% Gd为期望的回路传递函数% K为回路成型控制器模型% C…

查询Hologres或postgresql中的数据

因Hologres使用postgresql的语法.所以两者查询一样. 方案1: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;/*** 一个使用简单连接池管理PostgreSQL连接的工具类。*/ publi…

OpenBayes 一周速览|EasyControl 高效控制 DiT 架构,助力吉卜力风图像一键生成;TripoSG 单图秒变高保真 3D 模型

公共资源速递 10 个教程&#xff1a; * 一键部署 R1-OneVision * UNO&#xff1a;通用定制化图像生成 * TripoSG&#xff1a;单图秒变高保真 3D * 使用 VASP 进行机器学习力场训练 * InfiniteYou 高保真图像生成 Demo * VenusFactory 蛋白质工程设计平台 * Qwen2.5-0mni…

中兴云电脑W102D_晶晨S905X2_2+16G_mt7661无线_安卓9.0_线刷固件包

中兴云电脑W102D_晶晨S905X2_216G_mt7661无线_安卓9.0_线刷固件包 准备工作&#xff1a; 工具和设备在开始刷机之前&#xff0c;确保你已经准备好以下物品&#xff1a;双公头USB线&#xff1a;选择一根30-50厘米长的USB线&#xff0c;长度适中&#xff0c;方便操作&#xff0c;…

Rust 学习笔记:安装 Rust

Rust 学习笔记&#xff1a;安装 Rust Rust 学习笔记&#xff1a;安装 Rust在 Windows 上安装 Rust命令行创建 Rust 项目在 Mac/Linux 上安装 Rust一些命令升级卸载cargo -hrustc -h 安装 RustRoverrust-analyzer Rust 学习笔记&#xff1a;安装 Rust 在 Windows 上安装 Rust …

Opencv图像处理:轮廓检测、轮廓近似、绘制外接圆外接矩形

文章目录 一、图像轮廓检测1、比较2、常见的轮廓检测方法1&#xff09;基于梯度的方法2&#xff09;基于边缘检测器的方法3&#xff09;基于阈值的方法 3、查找轮廓与绘制轮廓4、参数解释4、代码解释1&#xff09;读取原图像灰度图并用二值化显示2&#xff09;轮廓绘制3&#x…

精益数据分析(17/126):精益画布与创业方向抉择

精益数据分析&#xff08;17/126&#xff09;&#xff1a;精益画布与创业方向抉择 大家好&#xff01;一直以来&#xff0c;我都希望能和大家一起在创业和数据分析的领域中不断探索、共同进步。今天&#xff0c;我们接着深入学习《精益数据分析》&#xff0c;这次聚焦于精益画…

每天五分钟深度学习PyTorch:图像的处理的上采样和下采样

本文重点 在pytorch中封装了上采样和下采样的方法,我们可以使用封装好的方法可以很方便的完成采样任务,采样分为上采样和下采样。 上采样和下采样 下采样(缩小图像)的主要目的有两个:1、使得图像符合显示区域的大小;2、生成对应图像的缩略图。 下采样( 放大图像)的…

代码随想录训练营第39天 || 198. 打家劫舍 213. 打家劫舍 II 337. 打家劫舍 III

198. 打家劫舍 思路&#xff1a; 动规五部曲&#xff1a; 1.dp数组及其下标的意义&#xff1a;dp数组表示当前房屋下偷与不偷的最大盗取金额 2.确定递推公式&#xff1a;因为盗取房屋只能间隔盗取&#xff0c;并且还要取最大值。所以每个房屋都有盗取和不盗取两个选择&…

【AI 加持下的 Python 编程实战 2_09】DIY 拓展:从扫雷小游戏开发再探问题分解与 AI 代码调试能力(上)

DIY 拓展&#xff1a;从扫雷小游戏开发再探问题分解与 AI 代码调试能力&#xff08;上&#xff09; 1 起因 最近在看去年刚出了第 2 版《Learn AI-assisted Python Programming》&#xff0c;梳理完 第七章 的知识点后&#xff0c;总感觉这一章的话题很好——问题分解能力的培…

使用DeepSeek-Prover-V1.5解决数学问题

DeepSeek-Prover-V1.5-RLRMaxTS是一个结合强化学习和搜索策略的自动定理证明系统。 1. 初等代数&#xff1a;二次方程求解 问题&#xff1a;解方程 x - 5x 6 0 操作步骤&#xff1a; 将问题转换为Coq形式&#xff1a; Theorem quadratic : exists x : Z, x^2 - 5*x 6 0…

3.3 技术框架:LangChain、ReAct、Memory与Tool Integration

随着人工智能技术的飞速发展&#xff0c;智能代理&#xff08;Agent&#xff09;已成为企业实现自动化、智能化和个性化服务的核心工具。在2025年&#xff0c;技术框架如LangChain、ReAct、Memory和Tool Integration在构建高效、灵活的AI代理系统中占据了重要地位。这些框架通过…