【发布时间】:2014-02-20 19:43:41
【问题描述】:
在我的应用程序中,我在 JBoss 7 AS 上设置了一个队列 (HornetQ)。
一旦收到消息(将值保存在数据库中等),我就使用 Spring 批处理做一些工作,然后消费者提交 JMS 会话。
有时在处理消息时出现异常,消费者的执行会突然中止。
并且消息保持在“传递中”状态。我的生产队列中大约有 30 条处于此状态的消息。
我尝试重新启动消费者,但这些消息的状态没有改变。删除这些的唯一方法
来自队列的消息是重新启动队列。但在此之前,我想要一种阅读这些消息的方法
它们可以被更正并再次发送到队列中进行处理。
我曾尝试使用 QueueBrowser 来阅读它们,但它不起作用。我在谷歌上搜索了很多,但不能
想办法阅读这些信息。
我正在使用 Transacted 会话,一旦处理完消息,我就会调用:
session.commit();
这会发送确认。 我正在实施spring的
org.springframework.jms.listener.SessionAwareMessageListener
接收消息然后处理它们。 在处理消息时,我正在使用 Spring Batch 在数据库中插入一些数据。 对于特定情况,它会尝试插入太大而无法插入列中的数据。 它抛出一个异常并且事务被中止。
现在,我已经修复了我的生产者和消费者没有这样的数据,这样这种情况就不会再发生了。
但我的问题是,我的生产队列中的 30 条“正在交付”状态消息是怎么回事?我想阅读它们,以便可以更正它们并再次发送到队列进行处理。有什么方法可以阅读这些消息吗?一旦我知道它们的内容,我可以重新启动队列并再次提交它们(在更正它们之后)。
谢谢你的期待,
苏瓦纳
【问题讨论】:
标签: jms jboss7.x spring-batch hornetq