MQSeriesQueueManager 队列管理器:

来源:互联网 发布:java socket长连接原理 编辑:程序博客网 时间:2024/06/06 06:41
MQSeriesQueueManager  队列管理器:MQSeries::QueueManager - OO interface to the MQSeries Queue ManagerO O 面向对象 MQSeries 队列管理器:语法:  use MQSeries qw(:functions);  use MQSeries::QueueManager;  #  # Simplest, trivial usage  #  my $qmgr = MQSeries::QueueManager->    new(QueueManager => 'some.queue.manager' ) ||    die("Unable to connect to queue manager\n");[mqm@node01 mqm]$ cat t4.pl  use MQSeries qw(:functions); use MQSeries::QueueManager;  #  #  # Simplest, trivial usage  #    #  my $qmgr = MQSeries::QueueManager->      new(QueueManager => 'YWJZZF_CZCB_SEND1' ) ||      die("Unable to connect to queue manager\n"); [mqm@node01 mqm]$ perl t4.pl MQCONN failed (Reason = 2058) (Queue manager name not valid or not known.) at t4.pl line 7.Unable to connect to queue manager##最后的错误检查,处理对象:##实例化和连接到队列管理器## 高级使用,让连接超时,和重连  my $qmgr = MQSeries::QueueManager->new    (     QueueManager       => 'some.queue.manager',     AutoConnect        => 0,     ConnectTimeout     => 120,     RetryCount         => 60,     RetrySleep         => 10,    ) || die "Unable to instantiate MQSeries::QueueManager object\n";  $qmgr->Connect() ||    die("Unable to connect to queue manager\n" .        "CompCode => " . $qmgr->CompCode() . "\n" .        "Reason => " . $qmgr->Reason() .        " (", MQReasonToText($qmgr->Reason()) . ")\n";##避免通道表文件或者MQSERVER  变量和指定客户端连接选项:  my $qmgr = MQSeries::QueueManager->new    (     QueueManager => 'some.queue.manager',     ClientConn   => { 'ChannelName'    => 'FOO',                       'TransportType'  => 'TCP', # Default                       'ConnectionName' => "hostname(1414)",  ###ip 端口                       'MaxMsgLength'   => 16 * 1024 * 1024,                     },    ) || die("Unable to connect to queue manager\n");##把一个消息在同步点之下,然后commit/backout(在很多情况下,一个put 完成使用一个MQSeries::Queue object instead###往MQ队列放入消息:[mqm@node01 mqm]$ cat t4.pl  use MQSeries qw(:functions); use MQSeries::QueueManager;  #  #  # Simplest, trivial usage  #    #  my $qmgr = MQSeries::QueueManager->      new(QueueManager => 'YWJZZF_CZCB_SEND' ) ||      die("Unable to connect to queue manager\n");my $msg_data="hhdsdahdgahadg";my $msg = MQSeries::Message->new(Data => $msg_data);  $qmgr->Put1(Message => $msg,              Queue   => 'CZ_RSP',             );[mqm@node01 mqm]$ perl t4.pl [mqm@node01 mqm]$ 描述:MQSeries::QueueManager  对象是一个面向对象的用于连接到MQSeries 队列管理器,打开或者查询一个队列管理器对象。这个模块是结合  MQSeries::Queue, MQSeries::Message and MQSeries::Properties, and the other MQSeries::* modules 一起使用那些对象提供一个简单的,高层次的接口道MQI这个模块也提供了特定的支持 用于连接超时(用于打断MQCONNX() 请求,请求可能会hang很久),以及连接重试METHODS :new构造函数以一个散列作为一个参数,具有以下键:  Key                           Value  ===                           =====  QueueManager                  String  Carp                          CODE reference  AutoConnect                   Boolean  AutoCommit                    Boolean  ConnectTimeout                Numeric  ConnectTimeoutSignal          String  GetConvert                    CODE reference  PutConvert                    CODE reference  RetrySleep                    Numeric  RetryCount                    Numeric  RetryReasons                  HASH Reference  CompCode                      Reference to Scalar Variable  Reason                        Reference to Scalar VariableQueueManager:这个只是 队列管理器的名字 你需要连接的,这是直接传递到MQCONNX() 请求通常,这个是简单的队列管理器的名字 你希望连接,但是如果"default" 队列管理器被使用,然后这个可以是一个空字符串,也可以完全省略Carp:这个key 指定了一个code 引用到一个程序来替换所有的carp()请求到API,允许API 用户来捕获和处理所有的错误消息AutoConnect  自动连接:这是一个可选的参数 默认是true, 如果值的参数是false,然后构造器不会自动调用Connect()方法,允许开发显示的调用,这样单独的错误检查对象实例化和连接到队列管理器。AutoCommit:如果这个参数设置为true, 那么挂起的事务会自动被提交 在对象消灭前。如果为false, 等待的事务 会被退出 在从队列管理器断开前ClientConn   ClientConn   => { 'ChannelName'    => "$ChannelName",                       'TransportType'  => 'TCP', # Default                       'ConnectionName' => "$ip($port)",                       'MaxMsgLength'   => 16 * 1024 * 1024,                     },对于客户端连接, 连接信息必须被以某种方式提供。默认, client channel table 文件(MQCLCHL.TAB) 或者 MQSERVER 使用环境变量。这个额外的参数允许你指定细节在你的代码里ClientConn 参数 是一个ChannelName 的hash 引用,ConnectionName 和 MaxMsgLength 是最中肯的。ConnectTimeout如果 这个值是给定, 它必须是一个正整数。 这个是时间, 单位秒, 一个MQCONNX() 必须完成 在MQI 调用会被中断。默认值,以为着MQCONNX() 称不中断。Connect:这个方法 不需要参数, 只是叫calls MQCONNX() 来连接到队列管理器这个方法是被自动调用的通过构造器,除非AutoConnect 参数是指定的Disconnect该方法没有参数, 仅仅调用MQDISC()来断开队列管理器需要注意的是, 这个方法不需要被调用,因为它是隐式被调用通过对象破坏者。如果Disconnect() 调用 错误需要被处理Put1这个方法封装 MQPUT1 call, 参数是一个hash,使用下面的key/value对 Key           Value  ===           =====  Message*      MQSeries::Message object  Queue         String, or ARRAY reference (distribution list)  QueueManager  String  ObjDesc       HASH reference  PutMsgOpts    HASH Reference  PutMsgRecs    ARRAY Reference  Sync          Boolean  PutConvert    CODE reference  Properties    HASH Reference or MQSeries::Properties object[mqm@node01 mqm]$ cat t4.pl  use MQSeries qw(:functions); use MQSeries::QueueManager;  #  #  # Simplest, trivial usage  #    #  my $qmgr = MQSeries::QueueManager->      new(QueueManager => 'YWJZZF_CZCB_SEND' ) ||      die("Unable to connect to queue manager\n");my $msg_data="hhdsdahdgahadg";my $msg = MQSeries::Message->new(Data => $msg_data);  $qmgr->Put1(Message => $msg,              Queue   => 'CZ_RSP',             );返回值 是true 或者false,依赖于 MQPUT1() 请求成功 如果失败如果一个PutConvert() 方法失败,在actual MQPUT1() 函数是被调用,Message这个参数是消息被放入到队列,该值必须是一个 MQSeries::Message对象Queue:这是一个队列,或者列出队列 如果使用一个分布式列表,放置消息。如果一个单独的队列, 然后这个值是一个字符串,命名的队列如果它是一个分布式列表, 然后这个值是一个ARRAY 引用,列出当前队列QueueManager注意 这个Key 是只有相关的 我们不适用分布式列表这个描述 目标队列的队列管理器   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\n");Queue 队列:这是队列,或者队列的列表 如果使用一个分布式列表, 来put消息。如果它是单独的队列, 然后只是一个字符串,命名队列。如果它是一个分布式列表, 然后这个值是一个ARRAY 引用,列出目标队列ObjDesc:整个 ObjDesc 结构传递到潜在的MQPUT1()调用可以指定通过key.在这种情况下,Queue and/or QueueManager 是简单忽略的。PutMsgOpts这个参数强制 开发者指定完整的PutMsgOpts 结构,会覆盖便利的flag的使用,比如 Sync.Sync:这是一个flag 来表明 Syncpoint 选项被使用, messages(s) 不提交到队列知道一个MQBACK或者MQCOMM 调用被执行它们是封装了Backout() and Commit() methods PutConvert:看到  new() 构造文档对于冗长的细节, 这个可以指定通过知识PUT1()方法在一个转换的消息需要被放入到一个队列在a MQSeries::QueueManager object  Close:该方法没有参数, 只是仅仅调用MQCLOSE() 来关闭实际的队列管理器对象。这个意味着只有当队列管理已经通过Inquire() 被打开my $getmessage = MQSeries::Message->new(Data =>"");       $attr = $command->InquireQueue       (        QName          => "$QueueName",        QAttrs         => [qw(                              OpenInputCount                              OpenOutputCount                              CurrentQDepth                               )],       ) or die "InquireQueue: " . MQReasonToText($command->Reason()) . "\n";Inquire:这种方法是一个接口道MQINQ() API 调用,然而,如果它需要更多方便,人可读的字符串代替  my $queue = MQSeries::Queue->    new(QueueManager => $qmgr_obj,        Queue        => "$QueueName",        Mode         => 'input_exclusive',       ) or die("Unable to open queue.\n");

0 0
原创粉丝点击