我配置的两个队列管理器(在Redhat Linux上运行的WebSphere MQ v7.1)之间的发送方和接收方通道经常发生故障。知道为什么吗?我该怎么调试呢?感谢。
答案 0 :(得分:6)
频道预计会下降。这个想法是,只要有交通然后超时,它们就会保持活跃状态。假设它们已被配置为触发,则XMitQ上存在消息会导致通道再次启动。
原因是如果网络故障或其他不良事件中断,触发通道通常会重启。但是,如果某个通道配置为24x7全天候运行,那么它停止运行的唯一方法是由于这些不良事件之一,这会增加重启频道所需的人为干预的可能性。另一方面,超时的通道可以承受在其处于非活动状态时发生的各种令人讨厌的网络事件。允许它在不使用时超时,从而提高了通道的整体可靠性。
那么如何引发频道?确保传输队列包含TRIGGER
,TRIGTYPE
,TRIGDATA
和INITQ
属性。例如,要定义JUPITER
QMgr:
DEF QL(JUPITER) +
USAGE(XMITQ) +
TRIGGER +
TRIGTYPE(FIRST) +
TRIGDATA('MYQMGR.JUPITER') +
INITQ(SYSTEM.CHANNEL.INITQ) +
REPLACE
该群中唯一的变量是TRIGDATA
,其中包含为此XMitQ提供服务的频道名称。
当然,通道启动程序必须正在运行,但在WMQ的现代版本中,它默认启动(基于队列管理器的SCHINIT
属性的值),因此通常 正在跑步。
无法触发处于STOPPED
状态的频道。默认情况下,STOP CHL
命令使用STATUS(STOPPED)
,因此大多数情况下手动停止通道会阻止触发。如果要以重启方式停止通道(例如测试触发),请使用STOP CHL(CHLNAME) STATUS(INACTIVE)
命令。如果频道已处于STOPPED
状态,请发出START CHL
命令以立即启动,或使用STOP CHL(CHLNAME) STATUS(INACTIVE)
将状态从STOPPED
更改为INACTIVE
无需启动它。
通道启动后,通道的DISCINT
属性将确定超时前的运行时间。该值以秒为单位,默认为600,即10分钟。 DISCINT
,KAINT
和HBINT
组合起来确定频道何时关闭。请注意,TCP规范要求使用keepalive来默认禁用它们,因此如果要在通道上使用keepalive,必须在QMgr调整中启用它,如here所述。 / p>
有关配置详细信息,请参阅信息中心的Triggering Channels。如果您想了解有关内部和调整的更多信息,请查看SupportPac MD0C WebSphere MQ - 保持频道启动和运行。 (SupportPac有点过时,但调整原则仍然适用。如果存在差异,则信息中心是权威版本。)
如果您想要持续保持频道,请设置DISCINT(0)
,但请记住,触发仍然是首选选项。有些商店需要在工作日期间尽量缩短响应时间,因此将DISCINT
设置为允许频道在晚上超时但通常让它们全天保持运行的值。如果由于某种原因你已经触发设置正确并且频道在DISCIINT
之前停止,你应该能够在错误日志中检查原因。它们位于errors
下的QMgr目录中。例如,在UNIX / Linux上,它们位于/var/mqm/qmgrs/qmgrname/errors
,而在Windows上,默认位置为C:\Program Files(x86)\WebSphere MQ\QMgrs\qmgrname\errors
。查找名为AMQERR??.LOG
的文件??
= 01
,02
或03
。日志会在01
为最新,02
为下一步的情况下轮换,依此类推。如果你有一个非常繁忙的QMgr,你需要在通道关闭或它们可以滚动时立即捕获它们。