• MQSeriesQueueManager 队列管理器:


    MQSeriesQueueManager  队列管理器:
    
    MQSeries::QueueManager - OO interface to the MQSeries Queue Manager
    
    O 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
    ");
    
    
    [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
    ");
     
    [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
    ";
    
      $qmgr->Connect() ||
        die("Unable to connect to queue manager
    " .
            "CompCode => " . $qmgr->CompCode() . "
    " .
            "Reason => " . $qmgr->Reason() .
            " (", MQReasonToText($qmgr->Reason()) . ")
    ";
    
    
    
    ##避免通道表文件或者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
    ");
    
    
    ##把一个消息在同步点之下,然后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
    ");
    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 Variable
    
    QueueManager:
    
    
    这个只是 队列管理器的名字 你需要连接的,这是直接传递到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
    ");
    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
    ");
    
    
    
    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()) . "
    ";
    
    
    Inquire:
    
    这种方法是一个接口道MQINQ() API 调用,然而,如果它需要更多方便,人可读的字符串代替
    
    
      my $queue = MQSeries::Queue->
        new(QueueManager => $qmgr_obj,
            Queue        => "$QueueName",
            Mode         => 'input_exclusive',
           ) or die("Unable to open queue.
    ");
    
    

  • 相关阅读:
    数学基础
    Codeforces Beta Round 84 (Div. 2 Only)
    Codeforces Round 256 (Div. 2)
    Codeforces Round FF(Div. 2)
    Codeforces Round 254 (Div. 2)
    Python3 集合(无序的set)
    Python3 字典(map)
    Python3 元组
    Python3 列表
    初等数论及其应用——唯一分解定理
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349849.html
Copyright © 2020-2023  润新知