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 埠號

 

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營