Oracle 高级队列(AQ)
适用对象:初步了解oracle高级队列人群
注意事项:
序号
注意事项
1
JMS监听部分基本参照以下网站内容:
http://blog.csdn.net/scorpio3k/article/details/49406209
2
本文仅为按作者本身的项目经历编写,不包含全部oracle高级队列功能
目录
Oracle 高级队列(AQ). 0
一.前言... 3
二.功能概述... 3
三.创建Oracle高级队列... 4
1.Oracle高级队列所需权限... 4
2.创建队列结构—TYPE. 4
3.创建队列表... 5
4.创建队列... 5
5.队列管理... 5
6.队列创建管理完整步骤... 7
四.JMS监听并处理Oracle 高级队列... 10
1. 准备工作:. 10
2. 创建连接参数类:. 10
3. 创建消息转换类:. 10
4. 主类进行消息处理:. 11
1 前言
一般系统的应用可以分为:立即要执行和可以延迟要执行的事情,区分这个很重要。为了提高系统的性能,缩短系统等待时间,引入队列技术。
队列是一种能将应用程序的处理工作有效地划分为前台任务和后台任务的技术。当处理容量允许时,这种技术通过存储消息、确定消息处理的优先顺序和向应用程序提交消息来发挥作用。它使你能够平衡本地计算机的负荷,或将任务分配到远程计算机。
为了减少用户的等待时间,应用程序可以让说明需要后台处理的消息排入队列。然后就可以从页面的呈递过程中去掉该处理任务。由一个后台进程来读取并队列处理这些消息,或者甚至可以交由一个单独的系统来处理它们。
队列可以实现各个系统之间的数据共享,消息通信。
2 功能概述
书写本文的目的:利用Oracle高级队列实现pl/sql代码,为其它语言实现高级队列的功能作接口。
Oracle高级队列有一下好处:
(1)高级队列管理是Oracle数据库的一个特性,它提供消息队列管理功能。这是一个非常可靠、安全和可伸缩的消息管理系统,因为它使用与其他基于Oracle技术的应用程序相同的数据库特性。
(2)高级队列管理的一个很大优点是它可以通过pl/sql、java或c来访问,这样你就可以把来自一个java servlet的消息入队列和使pl/sql存储过程中的相同消息出队列。
(3)高级队列管理的另一个优点是你可以利用这一软件通过Oracle net services (sql*net)、http(s)和smtp,在远程节点之间传播消息。高级队列甚至可以通过消息网关与非Oracle的消息管理系统(如ibm mqseries)相集成。
(4)Oracle高级队列管理提供了单消费者队列和多消费者队列。单消费者队列只面向单一的接收者。多消费者队列可以被多个接收者使用。当把消息放入多消费者队列时,应用程序的程序员必须显式地在消息属性中指定这些接收者,或者建立决定每条消息的接收者的基于规则的订阅过程。
Oracle 高级队列具体开发步骤如下:
(1)首先确定应用的需求,是否适合使用高级队列?使用高级队列预计提高性能的预期值
(2)赋予数据库账户相应aq权限。
(3)确定队列包体结构,即创建type。
(4)创建队列表及队列。
(5)队列管理
3 创建Oracle高级队列
3.1 Oracle高级队列所需权限
赋予权限和角色:
grant connect, resource to账户名;
grant aq_user_role to账户名;
grant aq_administrator_role to 账户名;
grant execute on sys.dbms_aqadm to账户名;
grant execute on sys.dbms_aq to账户名;
grant execute on sys.dbms_aqin to账户名;
grant execute on sys.dbms_aqjms to账户名;
3.2 创建队列结构—TYPE
create or replace type 类型名称 as object
(
字段一 字段类型,
字段二 字段类型,
字段三 字段类型,
字段四 字段类型,
…………………………
字段n 字段类型
);
3.3 创建队列表
begin
sys.dbms_aqadm.create_queue_table
(
queue_table => '队列表名'