是否有可能在Oracle AQ上实现指数重试延迟?

时间:2014-02-04 11:20:50

标签: oracle oracle11g advanced-queuing

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

如果消息是从AQ中取消并且无法处理的话我想将meesage回滚到队列并在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);

重试延迟是一个常数并且不是指数

有解决方法吗?

1 个答案:

答案 0 :(得分:1)

高级排队没有指数重试,但我们可以像下面这样实现它。 我们可以有一个主表来记录队列中排队的所有消息,并且当消息被处理时我们在此表上保持状态我们将状态置于该表中的同步状态,如果失败,我们将其设置为失败并且所有失败的消息都可以我们通过oracle预定的工作再次按您所希望的间隔推送。在主日志表中,您需要维护推入队列所需的所有数据。在主日志表上实现AQ始终是一个好习惯,从长远来看,它也为您提供了更好的调试选项。