MQSeriesQueue O O 接口到MQSeries Queue objects:
描述:
MQSeries::Queue 对象是一个OO 机制用于打开队列管理器,
putting 和getting messages 从那些队列, 提供一个接口是比完整的MQI简单的多
这个模块是结合MQSeries::QueueManager, MQSeries::Message and MQSeries::Properties.
那些对象提供一个MQI的子集,通过一个简单的接口:
这个主要值通过这个接口被增加来逻辑的重新连接 在某些失败情况下。
基本的, 任何Reason Code 代表一个短暂的状态,比如一个队列管理器关闭,或者一个连接丢失
my $qmgr_obj = MQSeries::QueueManager->new
(
QueueManager => "$QueueManager",
ClientConn => { 'ChannelName' => "$ChannelName",
'TransportType' => 'TCP', # Default
'ConnectionName' => "$ip($port)",
'MaxMsgLength' => 16 * 1024 * 1024,
},
) || die("Unable to connect to queue manager
");
my $queue = MQSeries::Queue->
new(QueueManager => $qmgr_obj,
Queue => "$QueueName",
Mode => 'input_exclusive',
) or die("Unable to open queue.
");
Key Value
=== =====
QueueManager MQSeries::QueueManager object ###队列管理器对象
Queue* String, or ARRAY reference (distribution list)
Mode* String
[mqm@node01 queue]$ cat t1.pl
use MQSeries qw(:functions);
use MQSeries::QueueManager;
use MQSeries::Queue;
use MQSeries::Message;
#
# Open a queue for input, loop getting messages, updating some
# database with the data.
#
my $qmgr_obj = MQSeries::QueueManager->
new(QueueManager => 'YWJZZF_CZCB_SEND');
my $queue = MQSeries::Queue->
new(QueueManager => $qmgr_obj, ##传入队列MQSeries::QueueManager object
Queue => 'CZ_RSP',
Mode => 'input_exclusive',
) or die("Unable to open queue.
");
[mqm@node01 queue]$ perl t1.pl
get 消息:
[mqm@node01 queue]$ cat t1.pl
use MQSeries qw(:functions);
use MQSeries::QueueManager;
use MQSeries::Queue;
use MQSeries::Message;
#
# Open a queue for input, loop getting messages, updating some
# database with the data.
#
my $qmgr_obj = MQSeries::QueueManager->
new(QueueManager => 'YWJZZF_CZCB_SEND');
my $queue = MQSeries::Queue->
new(QueueManager => $qmgr_obj,
Queue => 'CZ_RSP',
Mode => 'input_exclusive',
) or die("Unable to open queue.
");
my $getmessage = MQSeries::Message->new();
$queue->
Get(Message => $getmessage, ###MQSeries::Message 对象
Sync => 1,
) or die("Unable to get message
" .
"CompCode = " . $queue->CompCode() . "
" .
"Reason = " . $queue->Reason() . "
");
##打印消息
print $getmessage->Data();
$qmgr_obj->Commit();
Get:
这个方法 封装了MQGET 调用,参数是hash 使用下面的键值对:
Key Value
=== =====
Message* MQSeries::Message object
Put 一个消息到队列,使用 Storable 来允许使用引用作为消息数据
注意: 只有一个或者'Options' 或者’Mode' keys 可以指定的,
它们是相互排斥的。如果 'AutoOpen' 被给定,然后 'Options' and 'Mode' 是可选的,
它们被直接传递给Open()方法
QueueManager:
my $qmgr_obj = MQSeries::QueueManager->
new(QueueManager => 'YWJZZF_CZCB_SEND');
my $queue = MQSeries::Queue->
new(QueueManager => $qmgr_obj,
Queue => 'CZ_RSP',
Mode => 'input_exclusive',
) or die("Unable to open queue.
");
Queue 管理器 连接必须被指定,除非你需要连接到"default" 队列管理器,你的站点支持这个配置。
这个可以是一个 MQSeries::QueueManager object, 或者一个队列管理器的名字。
Queue 队列:
队列的名字必须被指定, 这个可以是一个普通的字符串,表明一个单个队列,或者一个ARRAY 引用,
表明一个分布式列表, 有三种方法指定:
Options:
如果这个选项key 是指定的, 然后Mode key 可能没有被指定。
那些是相互是排斥的。
CloseOptions:
DynamicQName: 动态名字
这是临时字符串用于使用当打开一个动态的队列。
这是只有相关的Queue 指定时一个模型队列。
DisableAutoResize
这是一个 布尔值,如果是真的, 会禁用自动调整message buffer 的大小当它被截断的 或者’Mode
AutoOpen
PutConvert, GetConvert 转换:
Close :
这个参数对于这个方法是一个 hash的键值对,当前只有一个key 是被迟滞的
需要注意的是, 这个方法不需要被调用, 因为它是隐式被调用通过 object destructor.
Put
这个方法封装了MQPUT call,参数是hash ,使用下面的键值对:
Key Value
=== =====
Message* MQSeries::Message object
PutMsgOpts HASH Reference
PutMsgRecs ARRAY Reference
Sync Boolean
PutConvert CODE Reference
Properties HASH Reference or MQSeries::Properties object
这个返回值是返回true或者false,取决于潜在的MQPUT() 调用。
如果操作失败,
如果一个 PutConvert()方法失败 在实际的MQPUT() 函数被调用前,
然后 Reason() 代码会是 MQRC_UNEXPECTED_ERROR,
然后 PutConvertReason() 会是true
Message
use MQSeries qw(:functions);
use MQSeries::QueueManager;
use MQSeries::Queue;
use MQSeries::Message;
use MQSeries::Command;
use Data::Dumper;
my $qmgr_obj='YWJZZF_CZCB_SEND';
my $queue = MQSeries::Queue->new
(
QueueManager => $qmgr_obj,
Queue => 'CZ_RSP',
Mode => 'output',
)
or die("Unable to open queue.
");
my $putmessage = MQSeries::Message->new
(
Data =>
"aaaaaaaaaabbbbbbbblllllllll"
,
);
$queue->Put(Message => $putmessage
)
Message:
这个参数是消息被放入到队列,值必须是一个 MQSeries::Message对象
Sync:
这是一个flag 表明 Syncpoint 选项被使用,消息不提交到队列直到一个MQBACK, MQCOMM or MQDISC call is made.
Get:
这个方法是封装了MQGET 请求,参数是一个hash,使用下面的键值对
Key Value
=== =====
Message* MQSeries::Message object ###对象
GetMsgOpts HASH Reference
Wait Numeric Value
Sync Boolean
DisableAutoResize Boolean
GetConvert CODE Reference
Convert Boolean (default: 1)
my $getmessage = MQSeries::Message->new();
$queue->
Get(Message => $getmessage,
Sync => 1,
) or die("Unable to get message
" .
"CompCode = " . $queue->CompCode() . "
" .
"Reason = " . $queue->Reason() . "
");
Get() 方法返回值是1,或者0或者-1, 成功或者失败可以仍旧解释为一个布尔值,
使用下面的说明。
返回的值为1 当一个消息成功从对列检索。
一个值为0 表明遇到了一些问题
最后的条件(-1) 可能或者不是一个错误,取决于你的引用
返回值为0 表明一个错误 或者如果可能的话,
任何 GetConvert() method 调用失败在一个成功的MQGET() 请求。
在这种情况下, GetConvertReason() 应该被检查
默认情况下, Get() 方法也会处理消息的buffer size 变的太小对于指定的情况
在这种情况下, 消息对象的BufferLength 是设置为MQGET() 请求返回的数据长度
Message:
这个参数是MQSeries::Message 对象,消息从队列提取。
Inquire: