我从ActiveMQ队列中获取消息并运行可以成功或失败的Java应用程序。
如果应用程序失败,我希望消息保留在队列中,即保留它而不会使其出列。
有没有办法在没有从队列中自动删除消息的情况下收到消息?
是否有像从队列中取出或从队列中删除的原子操作?
感谢。
答案 0 :(得分:6)
禁用消息的自动确认,然后在完成工作后手动调用message.acknowledge()。如果抛出异常并因此未调用message.acknowlege(),则AMQ将尝试再次传递消息。如果所有尝试都失败,则消息最终放在死信队列中。可以配置此行为。
答案 1 :(得分:2)
另一种方法是使用QueueBrowser。这允许您“查看队列中的消息而不删除它们”。 但是,这对于检查来说更有用,从你描述的语义来看,mbelow的答案似乎是正确的选择。