MQ中間件通道狀態STATUS(RETRYING)的問題分析與解決方法 這種問題一般發送在發送端,在我們發出啟動通道的命令之后,通道進入binding的狀態,若網絡連接暢通並且通道定義正確,它進入正常running狀態,如果出現了如下的一些問題,則通道進入retrying狀態。 檢查通道狀態示例 $ runmqsc QMgrName dis chs(C) AMQ8417: Display Channel Status details. CHANNEL(C) XMITQ(QX) CONNAME(xxx.xxx.xxx.xxx (1416)) CURRENT CHLTYPE(SDR) STATUS(RETRYING) 原因可能有如下幾種 1、網絡連接有問題 2、通道定義不正確 3、通道兩端的消息序列號(Message Sequence Number)不匹配 4、通道定義中的CONNAME(HostName (PortNumber))使用了主機名但是hosts文件中沒有定義 5、接收方不能連通 6、接收端沒有啟動監聽 7、接收端端口占用(比如其它隊列管理器占用了該端口) 解決方法 A、網絡連接有問題 檢查通道定義包括網絡不通,可使用 telnet 端口 測試連接 B、通道兩端的消息序列號(Message Sequence Number)不匹配 詳細請參考本站文章:Websphere MQ消息序號Message Sequence詳解 C、通道定義不正確 檢查通道配置,檢查方法: $ runmqsc QMgrName dis chl(ChannelName) D、通道定義中的CONNAME(HostName (PortNumber))使用了主機名但是hosts文件中沒有定義 檢查通道定義,檢查方法: $ runmqsc QMgrName dis chl(ChannelName) 檢查其中CONNAME是否使用了主機名,如果使用了,請檢查/etc/hosts文件中是否有其定義。 E、接收方不能連通 和 F、接收端沒有啟動監聽 檢查方法:MQSC 中的測試通道命令PING,格式如下: $ runmqsc QMgrName PING CHANNEL(channel_name) [DATALEN( 16 | integer)] 其中,DATALEN 表示 PING 數據包的大小,可以用 16 字節到 32,768 字節。 PING 命令可以檢查對方的隊列管理器或端口監聽器是否啟動,也可以檢查對方的通道定義是否正確。但不檢查通道的通性狀態。換句話說,PING CHANNEL 只檢查通道能否連連通,而不檢查目前是否連通。 G、接收端端口占用 接收端相應的隊列管理器停止監聽,然后檢查端口是否還在監聽: $ netstat -an|grep 端口號