【发布时间】:2014-05-25 02:02:19
【问题描述】:
我需要将来自 Oracle 队列的消息连续出列。
据我所知,我们可以通过两种方式使消息出队,通过异步自动通知方法或通过手动轮询过程,一次可以将一条消息出队。
我不能使用异步通知功能,因为它在高峰时段收到的消息数量可能会在 5 分钟内达到 1000 条,并且 我不想通过在后台产生多个回调过程来使数据库过载。
通过手动轮询过程,我可以创建一个 24*7 运行的一次性调度程序作业,该作业调用一个存储过程,该过程在 WAIT 模式(一种侦听消息)的循环中使消息出队。 这种方法的问题在于 1) 调度器作业连续运行,占用一个永久作业槽 2) 存储过程不会退出,因为它在循环中等待消息。
是否有任何替代/更好的解决方案,我不需要让作业/程序不断运行以查找消息?
我可以使用自动通知方法来获取第一条消息的通知,取消订阅订阅者并将进一步的消息出队吗? 当没有更多消息时再次订阅队列?这是一种安全的方法吗?我会在订阅和取消订阅之间丢失任何消息吗? 顺便说一句,我们使用 Oracle 10gR2 数据库,所以我不能使用 PURGE ON NOTIFICATION 选项。
感谢您的专家解决方案!
【问题讨论】:
标签: oracle oracle10g oracle-aq