0
我打算在OLTP应用程序中使用Oracle AQ异步通知功能。它在高峰时间内排队的消息数可能会在一分钟内上升到1000。出队回调过程将处理该消息,并将一个条目插入由消息类型决定的表中。Oracle AQ异步通知
我担心的是,它生成的大量排队通知(PL/SQL回调过程是否会针对每个通知进行调用)会导致数据库争用? 是否建议使用异步通知用于此目的,还是我应该使用可以在连续循环中一次退出一条消息的出队轮询过程。
我的数据库版本10gR2中
你专家的帮助是高度赞赏!
那么,对于手动出队进程,是否建议提交运行24 * 7的一次性调度程序作业(占用1个作业槽)并让程序在等待模式下在无限循环中运行出队命令?有没有更好的解决方案在后台连续运行出队过程? – user3496944
即使没有消息要退出队列,一个无限循环作业也不是一个好的选择... 相反,创建一个在循环中使用dbms_aq侦听器从队列中取消队列消息的过程。如果队列中有任何消息,监听器允许您将消息出队,否则会引发LISTENER TIME_OUT异常...使用异常退出循环..因此,只有当消息中至少有一条消息队列。 根据您对此过程的要求,您可以创建一个或多个作业。 – Krishna
感谢您的建议! 据我所知,具有AQ监听器命令的程序应通过运行24 * 7的日程安排作业执行以侦听消息。 即使采用这种方法,作业也将占用1个时隙并持续运行。我理解错了吗?你能否详细说明一下?有没有办法避免连续工作?顺便说一句,与我的方法一样,dequeue命令在循环内部以等待模式运行。如果没有消息,它只是等到消息到达。我想这与LISTEN阻止呼叫类似。 – user3496944