有了甲骨文的高级排队,是否有一种方法可以按照LIFO (最后先出)顺序排出消息的队列?有由于缺乏信息而发出的暗示表示这不是一个选项,但也许有一种方法可以这样做,比如以不同的顺序排队。
发布于 2011-02-23 22:37:56
假设您使用PL/SQL来排除消息的队列(可能还有额外的JMS限制--我对JMS和AQ之间的相互作用知之甚少),您应该能够使用优先级队列来实现LIFO (尽管这有点麻烦)。当您将消息排成队列时,您可以指定一个优先级
优先级属性指定消息的优先级。它可以是任何数字,包括负数。较小的数字表示更高的优先级。
如果您创建了一个从某个非常大的数字中返回的序列,您可以分配一个不断增加的优先级。然后,您的优先级排队列将以LIFO顺序接收消息。
发布于 2011-09-04 12:07:04
要在Oracle中获取LIFO行为,可以使用PL/SQL对象实现堆栈:
堆栈保存有序的数据项集合。堆叠有顶部和底部。项目只能在顶部添加或删除。因此,添加到堆栈中的最后一项是删除的第一项。(想想自助餐厅里一堆干净的餐盘。)操作推送和弹出更新堆栈,同时保留LIFO (LIFO)行为。堆栈有许多应用程序。例如,在系统编程中使用它们来确定中断的优先级和管理递归。堆栈的最简单实现使用整数数组,数组的一端表示堆栈的顶部。
然后,您需要包装您的enqueue/dequeue函数,这样,它们将不是传递到AQ,而是转到您的堆栈中,而不是AQ表。
发布于 2017-02-02 04:18:54
Oracle 12c的白皮书显式地使用LIFO队列作为选项,但我在实际的doco中找不到一个很好的参考,说明您将如何做到这一点:
另外,也可以根据队列时间、提交时间或优先级对消息进行排序,以获得FIFO甚至LIFO顺序来消费这些消息“http://www.oracle.com/technetwork/database/oracleadvancedqueuingwp-2524215.pdf。
(我能想到的一种选择是,在生产者中拥有一个优先级排序队列,优先级单调地增加:如果允许int64优先级,则会给出相当大的空间.)
https://dba.stackexchange.com/questions/1415
复制相似问题