• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

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

spring 来源:Gopal 6次浏览

我们有生产者以比消费者消耗的速度更快的速度生成消息。我们将Spring JMS集成用作消费者端技术堆栈。目前我们正在使用AUTO_ACKNOWLEDGE模式。消息监听器中的消息重新传递和错误处理

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

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

另一种选择是使用Spring提供的SessionAwareMessageListener接口。使用此接口的合同说,如果从onMessage抛出JMSException,则该消息将被重新递送。但是,我并不完全确定如何将其用于我们的目的。

虽然我更深入地了解了这一点,但任何来自你们的帮助都将不胜感激。

===========解决方案如下:

会话感知消息具有以下的onMessage原型:

onMessage(Message message, Session session) 

调用Session.recover时(),用于该消息重新传递。 session.recover()会将所有未确认的消息发送回jms目的地。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)