今天一个业务人员测试的环境出了点问题,问题是这个网络还是隔离的,远程登录不了,现场的机器没装MQ浏览器,这下可有点棘手了。
查问题呗,看看是否有堵得消息,只能用命令行来查了:
echo 'display queue(*) CURDEPTH WHERE(CURDEPTH NE 0)' | runmqsc 【QMNAME】
死信队列与超时队列:
现在项目中的ESB对超时消息的处理是放入一个队列中,然后java记录日志;
死信队列里是ESB放入的不是手工放入的貌似
下面是一些网上的说辞
超时的消息不会放到死信队列里。
放到死信队列里的消息都会被加上一个死信头,死信头里有一个字段是引起这条消息被放到死信队列里的原因码,基本上引起一个MQI操作失败的原因码都有可能在这里出现,含义和范围也就是和MQPUT/MQGET失败的原因码一样的。常见的原因有队列满了、队列被禁止写入消息。
管理超时消息
答案是可以的,在放置消息的时候除了指定超时以外,还指定一个要求队列管理生成报告消息的选项,并且指定报告的类型是超时,不要忘记了指定replytoq 和replytoqm ,这样每当有超时的消息被删除的时候,队列管理器就会生成一条报告消息,放到你指定的队列管理器,也就是replytoqm 的队列replytoq里面了,可以指定生成的报告消息的消息体,是复制原消息的头100个字节,还是复制整条消息。具体使用查一下MQ的编程手册吧。