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