文档库 最新最全的文档下载
当前位置:文档库 › MQ通道sequence相关知识

MQ通道sequence相关知识



1、什么是MQ的消息序号?
通道为每一条消息的传送分配了一个序列号,它会自动累计增值。
消息序列号由发送通道分配,是通道的一个永久属性,每当发送一条消息,消息序列号就加一。
通道的相关属性SEQWRAP 表示序号的最大值,缺省为999,999,999。序列号越界后自动归零,从头开始。
消息序列号是保证MQ消息传输不丢失、不复传的一个重要机制,通道利用消息序号来标识传送和确认的消息。

2、怎么查看通道当前的消息序号?
无论是在发送端还是接收端,在MQSC下输入如下命令,其中CURSEQNO即为当前消息序号:

$ runmqsc QM
dis chs(C) all
AMQ8417: Display Channel Status details.
CHANNEL(C) XMITQ( )
CONNAME(127.0.0.1) CURRENT
CHLTYPE(RCVR) INDOUBT(NO)
LSTSEQNO(0) LSTLUWID(0000000000000000)
CURMSGS(0) CURSEQNO(3)
CURLUWID(45BF8B5021200000) STATUS(RUNNING)
LSTMSGTI(21.36.03) LSTMSGDA(2012-10-27)
MSGS(3) BYTSSENT(328)
BYTSRCVD(1783) BATCHES(7)
BATCHSZ(50) HBINT(300)
NPMSPEED(FAST) CHSTATI(21.14.41)
CHSTADA(2012-10-27) BUFSSENT(8)
BUFSRCVD(11) LONGRTS(999999999)
SHORTRTS(10) JOBNAME(00000AD500000023)
MCASTAT(RUNNING) STOPREQ(NO)


3、正常情况下的通道两端消息序号是怎样的?
正常情况下,通道两端的消息序列号或者相等或者相差为一


4、什么原因会导致消息序号不一致?
A、通信故障:双方对前面的某一条(或一批) 消息是否发送成功理解不一致。在解决了不确定(In-doubt) 的消息后,可以用 MQSC 命令通过重置消息序号将双方调整到一致。
B、/var/mqm 使用旧的备份恢复
C、某一方MQ系统重新安装
D、队列管理器重建
E、某一方通道重建
F、某一方通道被重置



5、消息序号不一致会导致什么问题发生?
通道序号不一致会导致通道无法正常启动(即状态不是running),通道状态为retrying。
MQ日志会有错误记录,比如/var/mqm/qmgrs/队列管理器名称/errors/AMQERR01.LOG的内容:

---------------------------------------------------------
AMQ9526: 通道 'SDR.TEST' 的消息序号出错 或者 Message sequence number error for channel 'SDR.TEST'
说明:
本地和远程队列管理器对下一个消息序号不一致。当希望消息序号 1 时,发送了序号为 101 的消息。
操作:
确定该不一致的原因。有可能同步信息已损坏, 或已被逆序恢复成先

前的版本。如果问题不能解决, 可用 RESET CHANNEL
命令在通道的发送端人工复位此序号。
---------------------------------------------------------


6、消息序号不一致问题发生后怎么处理?
方法1:在通道发送端用 MQSC 命令,重置消息序号为1,稍后通道两端消息序号会被同步为1。
示例:在发送端将消息序号重置为1(默认为1,不是0) RESET CHANNEL (C) 等于 RESET CHANNEL (C) SEQNUM(1)
注意:在连接通道的主动方重置消息序号会将双方一起调整,在被动方重置则只设置一端。因为一旦连接断开后,通道重连时双方 MCA 会将消息序号同步。
建议:在发送端和接收端同时重置消息序号,这样能快速解决序号不一致的问题。


方法2:在通道接收方用MQSC命令将消息序号重置为与发送端相同(“5、消息序号不一致会导致什么问题发生?” 中的日志记录了发送方通道的序号)
示例:将接收通道消息序号重置为与发送通道的101: reset channel(C) seqnum(101)



7、MQ启动后是否需要重置消息序号?
MQ的消息序号是通道的一个永久属性,正常情况下,无论是重新启动队列管理器还是重新启动计算机,通道序列号都不会因此而变化,因而不需要进行重置操作。



相关文档