gpt4 book ai didi

java - 如何在 Oracle AQ 中停止在未经确认的情况下删除消息?

转载 作者:行者123 更新时间:2023-12-01 18:15:48 30 4
gpt4 key购买 nike

我已经设置了单个客户 Oracle AQ。我在 Java Web 应用程序中使用 CLIENT_ACKNOWLEDGE 模式观察来自此队列的消息。但是,一旦我在 onMessage 方法中收到消息,这些消息似乎就会从 Oracle 队列中删除。我的假设是,除非我在客户端中确认,否则该消息不应被删除。我该如何阻止这个?

Oracle 队列架构如下所示:

BEGIN DBMS_AQADM.CREATE_QUEUE_TABLE(
Queue_table => '"TESTUSER"."myqueuetable"',
Queue_payload_type => 'TESTUSER.messageobject',
multiple_consumers => false
);
END;
/

BEGIN DBMS_AQADM.CREATE_QUEUE(
Queue_name => 'TESTUSER.myqueue',
Queue_table => 'TESTUSER.myqueuetable',
Queue_type => 0, Max_retries => 5, Retry_delay => 0
);
END;
/

BEGIN dbms_aqadm.start_queue (
queue_name => 'testuser.myqueue'
);
END;

我像这样观察 Java 应用程序中的消息

 //somewhere in my app
session = queueConnection.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);
queueReceiver = ((AQjmsSession) databaseConnectionManager.getSession())
.createReceiver(databaseConnectionManager.getQueue(), Messageobject.getORADataFactory());
queueReceiver.setMessageListener(this);


//in my listener class
@Override
public void onMessage(Message message) {
AdtMessage msg = (AdtMessage) message;

try {
Messageobject message = (Messageobject) msg.getAdtPayload();

if (isUserConnected(message.userId)) {
logger.debug("Message acknowledged");
msg.acknowledge();
//handle the message. the message should be deleted now.
} else {
//i don't want the message to be deleted
}

} catch (JMSException | IllegalArgumentException | SQLException e) {
logger.error("An error occurred while sending an outgoing blob", e);
}
}

最佳答案

您正在创建一个消费者队列,该队列的消息在成功消费后立即被删除。

要保留消息,请在创建队列时将retention_time设置为大于零的值。

BEGIN 
DBMS_AQADM.CREATE_QUEUE(
Queue_name => 'TESTUSER.myqueue',
Queue_table => 'TESTUSER.myqueuetable',
Queue_type => 0, Max_retries => 5, Retry_delay => 0,
retention_time => 300 -- retain for next 5 minutes
);
END;
/

引用https://docs.oracle.com/database/121/ARPLS/d_aqadm.htm#ARPLS109

关于java - 如何在 Oracle AQ 中停止在未经确认的情况下删除消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60372579/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com