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