Oracle Advanced Queue - 出列后删除消息

时间:2015-10-21 10:40:56

标签: java oracle jms advanced-queuing

我们正在使用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方法呢?

1 个答案:

答案 0 :(得分:3)

我认为您遇到此问题是由于您的队列上的retention_time参数已配置为达到某个高值。

保留用于:

  

用户可以指定消费后保留消息。该   系统管理员可以指定消息的持续时间   保留。 Oracle AQ存储有关每个历史记录的信息   消息,保留延迟的队列和消息属性,   目的地为本地或远程的邮件的到期和保留   收件人。该信息包含ENQUEUE / DEQUEUE时间和   识别执行每个请求的事务。这个   允许用户保留相关消息的历史记录。历史可以   用于跟踪,数据仓库和数据挖掘操​​作。

您可以通过检查队列创建脚本并通过管理界面或使用ALTER_QUEUE更改设置来验证这一点。