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