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高级队列管理提供了单消费者队列和多消费者队列。单消费者队列只面向单一的接收者。多消费者队列可以被多个接收者使用。当把消息放入多消费者队列时,应用程序的程序员必须显式地在消息属性中指定这些接收者,或者建立决定每条消息的接收者的基于规则的订阅过程。
队列的开发主要有:队列的管理和队列的操作。
具体开发步骤如下:
1 首先确定应用的需求,是否适合使用高级队列?使用高级队列预计提高性能的预期值
2确定队列包体结构。
3 队列管理。
4 队列操作。
2 确定队列包体结构
底层消息的通信oracle已经实现,并且封装了,现在需要执行消息包体的结构,消息的发送和消息接收要通过一定的消息结构完成。
现在以短信push为例子,完成高级队列在短信push的应用。
安装好oracle数据库后,对smpuser授权
Grant aq_administrator_role To smpuser;
注意:需要把dbms_aq and dbms_aq_admin 包的调用功能权限付给smpuser.
CREATE OR REPLACE Type mt_struc As Object
/*
功能:push 的mt结构,和T_OUTBOX_PUSH结构一致
日期:2006-09-20
write by hancy
*/
(
OP_ID NUMBER ,
DEST_MOBILENO VARCHAR2(32) ,
FEE_MOBILENO VARCHAR2(32) ,
LONG_NO VARCHAR2(21) ,
MT_CONTENT VARCHAR2(500),
SERVICE_ID VARCHAR2(10) ,
MT_FLAG NUMBER(1) ,
MSG_FMT NUMBER(1) ,
FEE_TYPE NUMBER(1) ,
FEE_VALUE NUMBER(4) ,
BEG_REPORT NUMBER(1) ,
CLIENT_ID NUMBER(4) ,
CLIENT_NAME VARCHAR2(10) ,
MT_TIME DATE ,
MT_ID VARCHAR2(40) ,
PLAN_ID NUMBER ,
PUSH_TYPE VARCHAR2(20) ,
SEND_DATE DATE
)