這種問題一般發送在發送端,在我們發出啟動通道的命令之後,通道進入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…