• MQSeriesQueue O O 接口到MQSeries Queue objects:


    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:
    

  • 相关阅读:
    gorm使用小结
    golang 输入输出
    nginx 命令和配置
    设计模式
    并发
    Java教程
    Spring实战
    第12章 高级数据结构及其实现
    第10章 算法设计技巧
    第9章 图论算法
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349846.html
Copyright © 2020-2023  润新知