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…

发表评论