我在oracle中创建了一个AQ,并用Java编写了2个JMS使用者来监听队列。我有时观察到如果我在队列中产生一些消息;队列中出队消息的计数大于排队的消息数。这意味着一些消息被消耗了两次。
我创建了包含属性的队列: - multiple_consumers => FALSE
JMS消费者正在CLIENT_ACKNOWLEDGE mode
请帮助我了解此类行为的可能原因及其解决方案。因此,我可以复制问题并解决上述问题,并确保排队的消息数等于多个JMS消费者收听同一AQ时出列的消息数。
答案 0 :(得分:3)
如果没有看到您的代码,CLIENT_ACKNOWLEDGE
通常会说您正在手动发送确认。如果您不发送确认,则不会删除该消息,并且代理将在稍后阶段尝试重新发送该消息(例如,当您重新启动连接或类似时)。这可能是您担忧的原因。