吃饭的时候吃饭,睡觉的时候睡觉,工作的时候工作,学习的时候学习......
❝ MQ队列管理器未启动到启动过程实验 ❞
作者:彭新 日期:2014-04-30 分类:MQ 点击: 来源:www.wo81.com

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源,谢谢 !

MQ 5.2,操作系统SCO Unixware 7.1.3
 
发送端:
    队列管理器:QM
    远程队列:QR (RNAME为QL)
    传输队列:QX
    通道:名称C,类型SDR
接收端:
    队列管理器:QM2
    本地队列:QL
    通道:名称C,类型RCVR
 
准备工作:启动队列管理器QM,启动QM的发送通道C,QM2队列管理器不启动(处于Ended immediately状态)。
 
开始实验:
1、在QM上发送信息
/opt/mqm/samp/bin/amqsput QR QM
<输入相关的数据>
 
2、在QM2上接收信息
/opt/mqm/samp/bin/amqsbcg QL QM2(查看消息内容),报错如下:
AMQSBCG0 - starts here
**********************
 MQCONN failed with CompCode:2, Reason:2059
/opt/mqm/samp/bin/amqsget QL QM2 (查看消息内容并从队列中删除这些消息)报错如下:
Sample AMQSGET0 start
MQCONN ended with reason code 2059

 
3、检查CompCode(Completion Code)
0   MQCC_OK : Successful completion.
1   MQCC_WARNING : Warning (partial completion).
2   MQCC_FAILED :Call failed.
MQCC_FAILED表示调用失败,而MQCC_OK和MQ_WARNING则可以认为是成功的。
 
4、检查Reason Code
MQRC_Q_MGR_NOT_AVAILABLE   (2059, X’080B’)
解释如下: On an MQCONN or MQCONNX call,the queue manager identified by the QMgrName parameter is not available for connection,即目标队列管理器不可用。
 
5、在QM机器上检查
QM发送通道状态 STATUS(RETRYING):
dis chs(C)
AMQ8417: Display Channel Status details.
   CHANNEL(C)                              XMITQ(QX)
   CONNAME(xxx.xxx.xxx.xxx (1416))         CURRENT
   CHLTYPE(SDR)                            STATUS(RETRYING)
传输队列深度 CURDEPTH(2):
dis q(QX)
AMQ8409: Display Queue details.
   DESCR( )                                PROCESS( )
   BOQNAME( )                              INITQ( )
   TRIGDATA( )                             CLUSTER( )
   CLUSNL( )                               QUEUE(QX)
   CRDATE(2012-10-27)                      CRTIME(16.44.28)
   ALTDATE(2012-10-27)                     ALTTIME(18.04.37)
   GET(DISABLED)                           PUT(ENABLED)
   DEFPRTY(0)                              DEFPSIST(NO)
   MAXDEPTH(5000)                          MAXMSGL(4194304)
   BOTHRESH(0)                             SHARE
   DEFSOPT(SHARED)                         HARDENBO
   MSGDLVSQ(PRIORITY)                      RETINTVL(999999999)
   USAGE(XMITQ)                            NOTRIGGER
   TRIGTYPE(FIRST)                         TRIGDPTH(1)
   TRIGMPRI(0)                             QDEPTHHI(80)
   QDEPTHLO(20)                            QDPMAXEV(ENABLED)
   QDPHIEV(DISABLED)                       QDPLOEV(DISABLED)
   QSVCINT(999999999)                      QSVCIEV(NONE)
   DISTL(YES)                              DEFTYPE(PREDEFINED)
   TYPE(QLOCAL)                            SCOPE(QMGR)
   DEFBIND(OPEN)                           IPPROCS(0)
   OPPROCS(0)                              CURDEPTH(2)
日志文件/var/mqm/qmgrs/QM/errors/AMQERR01.LOG,错误摘要如下:
-------------------------------------------------------------------------------
10/27/12  18:24:37
AMQ9524: Remote queue manager unavailable.
EXPLANATION:
Channel 'C' cannot start because the remote queue manager is not currently
available.
ACTION:
Either start the remote queue manager, or retry the operation later.
-------------------------------------------------------------------------------
10/27/12  18:24:37
AMQ9999: Channel program ended abnormally.
EXPLANATION:
Channel program 'C' ended abnormally.
ACTION:
Look at previous error messages for channel program 'C' in the error files to
determine the cause of the failure.
-------------------------------------------------------------------------------
 
6、启动队列管理器QM2,确保其状态为RUNNING后,看下相关对象信息
dis chs(*)
AMQ8420: Channel Status not found   注:通道没有启动,所以查不到其状态
dis q(QL)
AMQ8409: Display Queue details.
   DESCR( )                                PROCESS( )
   BOQNAME( )                              INITQ( )
   TRIGDATA( )                             CLUSTER( )
   CLUSNL( )                               QUEUE(QL)
   CRDATE(2012-10-27)                      CRTIME(16.51.52)
   ALTDATE(2012-10-27)                     ALTTIME(16.51.52)
   GET(ENABLED)                            PUT(ENABLED)
   DEFPRTY(0)                              DEFPSIST(NO)
   MAXDEPTH(5000)                          MAXMSGL(4194304)
   BOTHRESH(0)                             SHARE
   DEFSOPT(SHARED)                         HARDENBO
   MSGDLVSQ(PRIORITY)                      RETINTVL(999999999)
   USAGE(NORMAL)                           NOTRIGGER
   TRIGTYPE(FIRST)                         TRIGDPTH(1)
   TRIGMPRI(0)                             QDEPTHHI(80)
   QDEPTHLO(20)                            QDPMAXEV(ENABLED)
   QDPHIEV(DISABLED)                       QDPLOEV(DISABLED)
   QSVCINT(999999999)                      QSVCIEV(NONE)
   DISTL(NO)                               DEFTYPE(PREDEFINED)
   TYPE(QLOCAL)                            SCOPE(QMGR)
   DEFBIND(OPEN)                           IPPROCS(0)
   OPPROCS(0)                              CURDEPTH(0)
 
 7、在QM2上查看信息内容,显示如下
/opt/mqm/samp/bin/amqsbcg QL QM2
AMQSBCG0 - starts here
**********************
 
 MQOPEN - 'QL'
  
 No more messages 
 MQCLOSE
 MQDISC
 
8、还是获取不到信息。。。怎么办呢?
 
9、重启发送通道?试试!!
在QM上:
runmqsc
stop channel(C)
start channel(C)
检查通道状态:dis chs(C),状态正常了,哈哈
 
在QM2上:
检查通道状态:dis chs(C),状态也正常
检查队列深度:dis q(QL),深度为2
查看队列信息:
/opt/mqm/samp/bin/amqsbcg QL QM2
AMQSBCG0 - starts here
**********************
 
 MQOPEN - 'QL'
 
 MQGET of message number 1 
****Message descriptor****
  StrucId  : 'MD  '  Version : 2
  Report   : 0  MsgType : 8
  Expiry   : -1  Feedback : 0
  Encoding : 546  CodedCharSetId : 819
  Format : 'MQSTR   '
  Priority : 0  Persistence : 0
  MsgId : X'414D5120514D2020202020202020202055A08B5012200100'
  CorrelId : X'000000000000000000000000000000000000000000000000'
  BackoutCount : 0
  ReplyToQ       : '                                                '
  ReplyToQMgr    : 'QM                                              '
  ** Identity Context
  UserIdentifier : 'mqm         '
  AccountingToken : 
   X'0331303000000000000000000000000000000000000000000000000000000006'
  ApplIdentityData : '                                '
  ** Origin Context
  PutApplType    : '6'
  PutApplName    : '/opt/mqm/samp/bin/amqsput   '
  PutDate  : '20121027'    PutTime  : '10175560'
  ApplOriginData : '    '
  GroupId : X'000000000000000000000000000000000000000000000000'
  MsgSeqNumber   : '1'
  Offset         : '0'
  MsgFlags       : '0'
  OriginalLength : '-1'
 
****   Message      ****
 
 length - 7 bytes
 
00000000:  6473 6473 6473 61                       'dsdsdsa         '
 
 
 MQGET of message number 2 
****Message descriptor****
  StrucId  : 'MD  '  Version : 2
  Report   : 0  MsgType : 8
  Expiry   : -1  Feedback : 0
  Encoding : 546  CodedCharSetId : 819
  Format : 'MQSTR   '
  Priority : 0  Persistence : 0
  MsgId : X'414D5120514D2020202020202020202055A08B5032200100'
  CorrelId : X'000000000000000000000000000000000000000000000000'
  BackoutCount : 0
  ReplyToQ       : '                                                '
  ReplyToQMgr    : 'QM                                              '
  ** Identity Context
  UserIdentifier : 'mqm         '
  AccountingToken : 
   X'0331303000000000000000000000000000000000000000000000000000000006'
  ApplIdentityData : '                                '
  ** Origin Context
  PutApplType    : '6'
  PutApplName    : '/opt/mqm/samp/bin/amqsput   '
  PutDate  : '20121027'    PutTime  : '10175624'
  ApplOriginData : '    '
  GroupId : X'000000000000000000000000000000000000000000000000'
  MsgSeqNumber   : '1'
  Offset         : '0'
  MsgFlags       : '0'
  OriginalLength : '-1'
 
****   Message      ****
 
 length - 5 bytes
 
00000000:  6473 6664 73                            'dsfds           '
 
 
 
 No more messages 
 MQCLOSE
 MQDISC
 
10、不用重启发送通道也能解决问题
查看发送通道定义如下,其中如下内容定义了重新连接的间隔。
dis chl(C)
     7 : dis chl(C)
AMQ8414: Display Channel details.
   CHANNEL(C)                              CHLTYPE(SDR)
   TRPTYPE(TCP)                            DESCR( )
   XMITQ(QX)                               MCANAME( )
   MODENAME( )                             TPNAME( )
   BATCHSZ(50)                             DISCINT(6000)
   SHORTRTY(10)                            SHORTTMR(60)
   LONGRTY(999999999)                      LONGTMR(1200)      
 
连接重试(Connection Retry): 通道(Channel)  在暂时无法接通时会试图重试,重试方式分为短等待和长等待两种方式,每一种方式都会以一定的时间间隔重试多数。属性如表 4-3,指明了发送方与接收方试图建立连接(Session)  的重试次数与间隔,如下位相关属性的定义:
属性描述                        属性名        缺省值             单位            有效范围                     说明
Short Retry Count       SHORTRTY       10                  次         0 -999,999,999           短等待次数
Short Retry Interval     SHORTTMR       60                  秒         0 -999,999,999           短等待间隔
Long Retry Count        LONGRTY   999,999,999          次         0 -999,999,999           长等待次数
Long Retry Interval      LONGTMR        1200               秒         0 -999,999,999            长等待间隔
 
连接重试的过程:通道首先用短等待方式进行连接重试, 每次等待 SHORTTMR 时长, 共 SHORTRTY 次。在短等待皆告失败后, 用长等待方式进行连接重试, 每次等待 LONGTMR 时长, 共 LONGRTY次。  所以,重试(Retry)  的总时长为:(SHORTRTY * SHORTTMR ) + (LONGRTY * LONGTMR )。在重试期间,通道处于重试(Retrying)  状态,在所有的重试工作皆告失败后,通道处于关闭(Closed)  状态。
 
试验结果:作为接收端,启动后如果依然获取不到信息,可以联系发送端重启发送通道以便触发接收通道的启动。当然,也可以选择不联系,等待发送通道下一次重新连接触发启动。

本文链接:MQ队列管理器未启动到启动过程实验

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源,谢谢 !