·ChinaUnix首页 ·论坛 ·博客 
Linux首页 | Linux新闻 | Linux论坛 | Linux文档 | Linux下载 | Linux博客 | Linux搜索 | 开源项目孵化平台 | 《开源时代》
新手入门 | 安装启动 | 管理员指南 | 开发手册 | 桌面应用 | 程序开发 | 数据库 | 网络技术| CentOS | Fedora | MySQL | Apache | Ubuntu | Gentoo| OSCON08
  Linux时代 >> 技术文档 >> 程序开发
 
orcale queue
来源: linux频道  日期: 2012.03.16 16:38 (共有条评论) 我要评论
 

orcale queue











为应用系统构建消息通讯之2-----使用oracle高级队列传递消息1

下面给出oracle高级队列传递消息的一些说明,注意没有给出oracle高级队列传的消息传递,以及基于主题消息的通知/监听的相关东西,等我有空再补上。
--=========================================================
1.高级队列操作(AQ)
参考资料
  Oracle9i Application Developer's Guide - Advanced Queuing
Release 1 (9.0.1)
  Oracle9i PL/SQL 从入门到精通
中国水利水电出版社 2002年5月 ISBN 7-5084-1055-6
1.1.创建对列消息的对象类型(Type)
定义一个对象类型。这个对象类型用于充当队列消息中的消息体。

create or replace type WDZAQMSG as object
-- Author : wdz
-- Created : 2003-11-19 13:49:03
-- Purpose : 消息队列类型
-- Attributes
id int,
name varchar2(200),
info varchar2(2000)
)
1.2.创建队列表
参考dbms_aqadm.create_queue_table
1.存储参数storage_clause 可以是 MAXTRANS,LOB等
2.sort_list 可以是PRIORITY,enq_time这2个参数或者其中一个。
具体可以察看对应的 队列表的数据结构。例如下面的例子
--创建队列表,'WDZAQTABLE' 队列表名,'WDZAQMSG'队列对象名(充当消息体的对象名称),以下同
dbms_aqadm.create_queue_table('WDZAQTABLE','WDZAQMSG');
--创建具有排序功能的队列表
dbms_aqadm.create_queue_table('WDZSQRTAQTABLE','WDZAQMSG',sort_list => 'PRIORITY,enq_time');
3。消息分组
参数 message_grouping 可以是 NONE,或 TRANSACTIONAL
-- message grouping
dbms_aqadm.TRANSACTIONAL       CONSTANT BINARY_INTEGER := 1;
dbms_aqadm.NONE             CONSTANT BINARY_INTEGER := 0;
后者表示一个与事务相关的消息分成1组,在提取消息的时候可以当成一组相关消息来提取。
例如:
--创建带带分组功能的消息队列表
dbms_aqadm.create_queue_table('WDZGROUPAQTABLE','WDZAQMSG',
sort_list => 'PRIORITY,enq_time',
  message_grouping =>dbms_aqadm.TRANSACTIONAL/*dbms_aqadm.NONE*/ );
4.multiple_consumers
表示消息接受者是否为多个用户。默认是只有1个接收者。如果要多个用户可以接受消息,需要设置=true
--创建多个接收者的消息队列表
dbms_aqadm.create_queue_table('WDZMUTIAQTABLE','WDZAQMSG',sort_list => 'PRIORITY,enq_time',
  message_grouping =>dbms_aqadm.TRANSACTIONAL/*dbms_aqadm.NONE*/
  ,multiple_consumers => true);

1.3创建队列
参考 dbms_aqadm.create_queue
--创建队列, 'WDZQUEUE' 为队列的名称,'WDZAQTABLE' 队列表名
dbms_aqadm.create_queue('WDZQUEUE','WDZAQTABLE',queue_type => dbms_aqadm.NORMAL_QUEUE);
参数queue_type 表示队列是否为正常队列还是异常队列,
参数值为dbms_aqadm.NORMAL_QUEUE 或者dbms_aqadm.EXCEPTION_QUEUE

--创建多用户队列, 'WDZQUEUE' 为队列的名称,'WDZAQTABLE' 队列表名
dbms_aqadm.create_queue('WDZMUTIQUEUE','WDZMUTIAQTABLE',
queue_type => dbms_aqadm.NORMAL_QUEUE);
--创建分组队列, 'WDZGROUPQUEUE' 为队列的名称,'WDZAQTABLE' 队列表名
dbms_aqadm.create_queue('WDZGROUPQUEUE', 'WDZAQTABLE',
    queue_type => dbms_aqadm.NORMAL_QUEUE);

1.4创建非持久队列
非持久队列 顾名思义就是没有永久保存到数据的队列,队列只存在于系统的内存中。
参考 dbms_aqadm.create_np_queue
--创建队列, 'WDZQUEUE2' 为队列的名称,
dbms_aqadm. create_np_queue ('WDZQUEUE2', multiple_consumers=>false);
参数 multiple_consumers表示接收者是否为多用户接收
1.5启动一个队列
参考dbms_aqadm.start_queue
参数enqueue表示是否可以入队操作
参数dequeue表示是否可以入队操作

-- 启动一个队列,'WDZQUEUE' 为队列的名称1.6停止队列
参数的意思参考启动一个队列1.7普通的入队/出队操作
1.7.1.一个普通的消息发送/接收例子
1.消息发送2.消息接收1.7.2带有优先级别的消息发送接收例子
1.消息发送2.消息接收1.7.3消息浏览
1.消息发送2.消息接收

-- 目的,先浏览所有消息,找到指定消息后把这个消息删除1.9消息属性参数

type message_properties_t is record (
---消息优先级别 ,可以小于0 ,数字越小优先程度越高
  priority binary_integer default 1,
  ---消息在队列中的延迟时间,过了这个时间消息才可以出队
  --delay=NO_DELAY 消息不延迟,否者为延迟时间
  delay   binary_integer default NO_DELAY,
  --消息过期时间,expiration=NEVER,消息永远不过期
  expiration binary_integer default NEVER,
  ---消息发送方设置的标示符号
  correlation varchar2(128) default null,
  attempts binary_integer,
  --消息接收者列表
  recipient_list aq$_recipient_list_t,
  -- 异常队列名称,当消息不能处理,或者处理出错,消息被转移到这个队列,类似于jsp的错误页面
  exception_queue varchar2(51) default null,
  --消息进入队列的时间,由系统维护用户不能修改
  enqueue_time date,
  --发送方标识
  sender_id aq$_agent default null,
  --AQ消息传播用来说明来源
  original_msgid raw(16) default null);   
;
1.10消息接收者/订阅者
--消息接收者--消息接收者列表--消息订阅者列表类型---定义一个队列的注册列表1.11多用户队列的使用(订阅/发布模型)
1.多用户队列的使用,建立订阅者列表
---多用户队列的使用,建立订阅者列表2.消息发送
--消息的发送(发布/订阅模型)3.消息的接收
-- 发布/订阅模型 ,消息的接收--用户 apple 开始接收消息[/code]

1.12消息分组的使用
1.消息分组,消息的发送
--消息分组,消息的发送2.消息的接收
---消息分组,消息的接收1.7消息选项参数dbms_aq.dequeue_options_t
由于包dbms_aq是加密的,所以看不到dbms_aq. dequeue_options_t,现给出参数说明.
type dequeue_options_t is record {
  ---visibility指定消息入队时的事务行为,visibility=ON_COMMIT 说明生成的消息是
--当前事务的一部分
  --visibility=IMMEDIATE 消息立即进入队列,如果 操作的非持久队列,该参数必须等于这个值
  visibility binary_integer default ON_COMMIT ,
  ---relative_msgid 消息的标识和 参数 seqquence_deviation 配合使用,
--而且在 seqquence_deviation = BEFORE 才有效
  relative_msgid raw(16) default null,
  --seqquence_deviation 说明当消息进入队列的放置方式
  -- seqquence_deviation=null 放置到队尾
  --seqquence_deviation=TOP 放置到队头
  --seqquence_deviation=TOP 放置到指定消息 relative_msgid 的前面   
  seqquence_deviation binary_integer default null,
  ---transformation 指明消息进入队列前使用的转换函数
  transformation varchar2(60) default null
};
  发表评论 查看评论(共有条评论)
 
 


最新资讯更多>> 
· 谷歌劝说诺基亚采用Android操作..
· Apache 基金会确认退出 JCP 执..
· Chrome 10 新功能探秘:新增GP..
· 金山宣布开源其安全软件
· 女黑客在开源会议上抱受骚扰
· 21款值得关注的Linux游戏
· 马化腾:腾讯半年后彻底转型,..
· [多图] Chrome OS 预发布版本多..
· Lubuntu 11.04 默认应用抢先一览
· Red Hat宣布收购云计算软件提供..
论坛热点更多>> 
· do_execve时候用户栈中参数的..
· swapinfo -atm 问题
· Linux 的优点简述
· VM虚拟机上得Red Hat Linux上..
· 我看成了上海男人喜欢女人毛..
· 校车展览,看了你就知道
· 在遇到他之前,唯一需要做的..
· GRUB的疑问
· 从来没有人真正付足书价——..
· 云存储 vs 网盘
文档更新更多>> 
· orcale queue
· 谁可以推荐几本经典的操作系统的..
· 【北京】某物联网公司招云计算应..
· 【北京】某物联网公司招云计算应..
· 谁能推荐几本关于操作系统的书
· 如何添加网络接口eth1
· 葡萄牙语入门教材的选取与经验分享
· 葡萄牙语就业前景分析
· 葡萄牙语学习经验交流
· Щ
 
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 友情链接 | 免费注册

Copyright © 2001-2009 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证:060528号