我们使用Oracle JMS从高级队列中读取消息。我们使用以下代码从队列中读取消息:
MessageConsumer consumer = sess.createConsumer(q);
for (Message m; (m = consumer.receive()) != null;)
{
new Timer().schedule(new QueueExample(m), 0);
}问题是,在从队列接收消息之后,没有从队列表中完全删除消息,只有状态字段从0更改为2。这是Oracle JMS客户端的默认行为吗?我们希望在使用consumer.receive()方法从队列中读取消息之后,从队列表中完全删除记录。做这件事的适当api方法是什么?
发布于 2015-10-21 11:02:47
我认为,由于队列中的retention_time 参数被配置为高值的,所以您正在经历这种情况。
保留用于:
用户可以指定在使用后保留消息。系统管理员可以指定保留消息的持续时间。Oracle AQ存储有关每条消息的历史记录的信息,为发送给本地或远程收件人的邮件保留队列和延迟、过期和保留的消息属性。该信息包含ENQUEUE/DEQUEUE时间以及执行每个请求的事务的标识。这允许用户保存相关消息的历史记录。历史可用于跟踪、数据仓库和数据挖掘操作。
您可以通过检查队列创建脚本来验证这一点,并通过管理界面或使用ALTER_QUEUE更改设置。
https://stackoverflow.com/questions/33257174
复制相似问题