我们的应用程序使用许多Oracle AQ队列进行通信,目前,我们有一个非常老的“后台服务”体系结构,这些体系结构循环这些队列并提取消息。尽管这很好用,但由于其复杂性以及它们是用Pro * C编写的事实而难以支持。长话短说,我们正在探索使用PL / SQL进行重写。
我已经使用Oracle AQ和DBMS_SCHEDULER作业创建了替代品的原型,该作业在记录入队时触发。问题是,在排队的记录和执行的作业之间存在300-1500ms的延迟。我怀疑Oracle使用间隔运行的后台进程来监听队列,但是我找不到增加间隔或配置间隔的方法。这是在RHEL 8上使用Oracle 19c标准版作为参考。
是否可以消除延迟?
对于我们的大多数队列,此延迟并不大,但是对于某些队列(例如,一个许可服务器),我们需要更快的响应时间。我们现有的队列没有此延迟(可能是由于while循环方法所致),并且几乎可以立即响应排队的记录。
目前有六个应用程序在使用这些队列,并全部重写它们以使用不同的方法是不可行的,只有这些Pro * C后台服务在范围之内。我曾考虑过使用相同的while循环方法,但使用PL / SQL代替-但这听起来也不是最佳选择。