1

我想知道是否可以在 Oracle AQ 订阅上设置指数重试延迟

如果消息从 AQ 出队并且无法处理,我想将消息回滚到队列并在 1 分钟后重试,然后 2 分钟和 8 小时

我正在使用发布和订阅方法,其中订阅是同一数据库中的 pl/sql 过程(我没有使用队列到队列传播)

DBMS_AQADM.CREATE_QUEUE(
queue_name => l_queue_name,
queue_table => l_qtable_name,
max_retries => 3,
retry_delay => 1,
retention_time => 1209600);

重试延迟是一个常数,不是指数的

有解决方法吗?

4

1 回答 1

1

Advance Queuing 没有指数重试,但我们可以像下面这样实现它。我们可以有一个主表来记录所有在队列中排队的消息,并在处理消息时在此表上维护状态,我们将状态同步到该表中,如果失败,我们将其设置为失败,所有失败的消息都可以我们通过 oracle 计划作业以您想要的时间间隔再次推送。在主日志表中,您需要维护推送到队列中所需的所有数据。在主日志表上实现 AQ 始终是一个好习惯,它还为您提供了更好的长期调试选项。

于 2014-02-05T14:12:53.387 回答