Spring 消息侦听器中的消息重新传递和错误处理

Spring 消息侦听器中的消息重新传递和错误处理,spring,jms,spring-jms,Spring,Jms,Spring Jms,我们有一个生产者,它以比消费者消费更快的速度生成消息。我们使用SpringJMS集成作为消费端技术堆栈。目前我们使用的是自动确认模式 在侦听器的onMessage()方法中,在收到消息后,我们计划将客户端作业提交到作业队列,并从onMessage()方法返回。这意味着如果a)处理失败或b)我们的服务器在处理过程中停机,我们将无法恢复 我们研究了使用客户端确认的选项,但这意味着确认时间戳较高的消息会自动确认时间戳较短的所有消息。这对我们来说显然是不可取的,因为成功处理具有较新时间戳的消息并不意味着

我们有一个生产者,它以比消费者消费更快的速度生成消息。我们使用SpringJMS集成作为消费端技术堆栈。目前我们使用的是
自动确认
模式

在侦听器的
onMessage()
方法中,在收到消息后,我们计划将客户端作业提交到作业队列,并从
onMessage()
方法返回。这意味着如果a)处理失败或b)我们的服务器在处理过程中停机,我们将无法恢复

我们研究了使用
客户端确认
的选项,但这意味着确认时间戳较高的消息会自动确认时间戳较短的所有消息。这对我们来说显然是不可取的,因为成功处理具有较新时间戳的消息并不意味着所有具有较旧时间戳的消息都被完全处理。实际上,我们正在查看每条消息的确认。然而,我在某个地方读到,这意味着存在一些设计缺陷

另一个选项是使用Spring提供的
SessionAwareMessageListener
接口。使用此接口的契约规定,如果从
onMessage
抛出
jmsceception
,消息将被重新传递。然而,我并不完全确定如何将其用于我们的目的


在我深入了解这一点的同时,非常感谢你们的帮助。

会话感知消息在消息原型上有以下内容:

 onMessage(Message message, Session session)
调用session.recover()以重新传递消息。recover()将把所有未确认的消息发送回jms目标