繁体   English   中英

Oracle Advanced Queue - 出列后删除消息

[英]Oracle Advanced Queue - Removing Message after Dequeue

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

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

保留用于:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM