当前位置:
首页
文章
移动端
详情

IBM MQ系列:重置序列号

一.什么是MQ的消息序号?

通道为每一条消息的传送分配了一个序列号,它会自动累计增值。

消息序列号由发送通道分配,是通道的一个永久属性,每当发送一条消息,消息序列号就加一。

通道的相关属性SEQWRAP 表示序号的最大值,缺省为999,999,999。序列号越界后自动归零,从头开始。

消息序列号是保证MQ消息传输不丢失、不复传的一个重要机制,通道利用消息序号来标识传送和确认的消息。

二.怎么查看通道当前的消息序号?

无论是在发送端还是接收端,在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)

三.正常情况下的通道两端消息序号是怎样的?

正常情况下,通道两端的消息序列号或者相等或者相差为一。

四.什么原因会导致消息序号不一致?

1.通信故障:双方对前面的某一条(或一批) 消息是否发送成功理解不一致。在解决了不确定(In-doubt) 的消息后,可以用 MQSC 命令通过重置消息序号将双方调整到一致。

2./var/mqm 使用旧的备份恢复

3.某一方MQ系统重新安装

4.队列管理器重建

5.某一方通道重建

6.某一方通道被重置

五.消息序号不一致会导致什么问题发生?

通道序号不一致会导致通道无法正常启动(即状态不是running),通道状态为retrying。

MQ日志会有错误记录,比如/var/mqm/qmgrs/队列管理器名称/errors/AMQERR01.LOG的内容:

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

六.消息序号不一致问题发生后怎么处理?

方法一:在通道发送端用 MQSC 命令,重置消息序号为1,稍后通道两端消息序号会被同步为1。

示例:在发送端将消息序号重置为1(默认为1,不是0) RESET CHANNEL (C) 等于 RESET CHANNEL (C) SEQNUM(1)

注意:在连接通道的主动方重置消息序号会将双方一起调整,在被动方重置则只设置一端。因为一旦连接断开后,通道重连时双方 MCA 会将消息序号同步。

建议:在发送端和接收端同时重置消息序号,这样能快速解决序号不一致的问题。

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

示例:将接收通道消息序号重置为与发送通道的101: reset channel(C) seqnum(101)

七.MQ启动后是否需要重置消息序号?

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

八.常见问题

问题:MQ 重置通道序列号不生效

请检查您重置的通道是发送通道还是接收通道,如果重置接收通道肯定只能重置接收通道的序号,并不能改变发送通道的序号,一样会消息序号出错,当然,也可以查找到发送通道的消息序号,然后将接收通道的消息序号重置成与发送通道相同的值。

具体请参考 - 6、消息序号不一致问题发生后怎么处理?

更多IBM MQ相关内容详见:
IBM MQ系列:WebSphere MQ快速入门
IBM MQ系列:(集群版)部署及初始化
IBM MQ系列:(单机版)部署调试
IBM MQ系列:认证及队列创建
IBM MQ系列:(集群版)配置参考指引
IBM MQ系列:(client to service) SSL配置指引
IBM MQ系列:python客户端安装指引
IBM MQ系列:重置序列号
IBM MQ系列:备份与恢复
IBM MQ系列:操作命令手册
IBM MQ系列:队列管理器无法正常启动修复方案

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。