我们正在使用Oracle JMS API来读取Advanced Queue中的消息。我们使用以下代码来读取队列中的消息:
MessageConsumer consumer = sess.createConsumer(q);
for (Message m; (m = consumer.receive()) != null;)
{
new Timer().schedule(new QueueExample(m), 0);
}
问题是,从队列收到消息后,它没有从队列表中完全删除,只有STATE字段从0更改为2.这是Oracle JMS客户端的默认行为吗?在使用consumer.receive()方法从队列中读取消息之后,我们希望从队列表中完全删除记录。什么是适当的api方法呢?
答案 0 :(得分:3)
我认为您遇到此问题是由于您的队列上的retention_time
参数已配置为达到某个高值。
保留用于:
用户可以指定消费后保留消息。该 系统管理员可以指定消息的持续时间 保留。 Oracle AQ存储有关每个历史记录的信息 消息,保留延迟的队列和消息属性, 目的地为本地或远程的邮件的到期和保留 收件人。该信息包含ENQUEUE / DEQUEUE时间和 识别执行每个请求的事务。这个 允许用户保留相关消息的历史记录。历史可以 用于跟踪,数据仓库和数据挖掘操作。
您可以通过检查队列创建脚本并通过管理界面或使用ALTER_QUEUE
更改设置来验证这一点。