【问题标题】:Oracle Advanced Queue - Removing Message after DequeueOracle 高级队列 - 出队后删除消息
【发布时间】:2016-01-20 07:46:35
【问题描述】:

我们正在使用 Oracle JMS API 从高级队列读取消息。我们使用以下代码从队列中读取消息:

    MessageConsumer consumer = sess.createConsumer(q);


    for (Message m; (m = consumer.receive()) != null;) 
    {
          new Timer().schedule(new QueueExample(m), 0);
    }

问题是,从队列中接收到消息后,并没有完全从队列表中删除,只是将STATE字段从0更改为2。这是Oracle JMS Client的默认行为吗?在使用 consumer.receive() 方法从队列中读取消息后,我们希望从队列表中完全删除记录。什么是合适的 api 方法来做到这一点?

【问题讨论】:

    标签: java oracle jms advanced-queuing


    【解决方案1】:

    我认为您遇到这种情况是因为您的队列中的 retention_time 参数被配置为某个较高的值。

    保留用于:

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

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

    【讨论】:

    • 你是对的。保留时间设置为无限。因此,消息在消费后并未从队列中删除。我将保留时间更改为 0,现在消息已成功从队列中删除。感谢您的帮助!
    猜你喜欢
    • 2016-11-25
    • 2015-10-18
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多