【问题标题】:IBM MQ message channel is not coming upIBM MQ 消息通道未出现
【发布时间】:2016-01-04 12:33:46
【问题描述】:

我正在尝试在 IBM MQ v8 上设置消息通道。

我在 Ubuntu Linux 上运行 IBM MQ Server 8.x。

我有 2 个队列管理器 QM1 和 QM2。

在 QM1 上,我创建了一个 Sender Channel,在 QM2 上,我创建了一个 Receiver 通道。

在 QM1 上:

远程队列定义

DEFINE QREMOTE(RMQ1) DESCR('Remote queue for QM2') REPLACE +
PUT(ENABLED) XMITQ(QM2)  RNAME(Q_ON_QM2) RQMNAME(QM2)

传输队列定义

DEFINE QLOCAL(QM2) DESCR('Transmission queue to QM2') REPLACE +
USAGE(XMITQ) PUT(ENABLED) GET(ENABLED) TRIGGER TRIGTYPE(FIRST) +
TRIGDATA(QM1.TO.QM2) INITQ(SYSTEM.CHANNEL.INITQ)

TCP/IP 连接的发送方通道定义:

DEFINE CHANNEL(QM1.TO.QM2) CHLTYPE(SDR) TRPTYPE(TCP) +
REPLACE DESCR('Sender channel to QM2') XMITQ(QM2) +
CONNAME('127.0.0.1(**1491**)') //-- QM2's listener is on 1490

第二个队列管理器 (QM2)

本地队列定义

DEFINE QLOCAL(Q_ON_QM2) REPLACE PUT(ENABLED) GET(ENABLED) +
DESCR('Local queue ')

接收器通道定义

对于 TCP/IP 连接:

DEFINE CHANNEL(QM1.TO.QM2) CHLTYPE(RCVR) TRPTYPE(TCP) +
REPLACE DESCR('Receiver channel from QM1')

在配置结束时,我的发送方通道保持在“重试”状态,接收方通道保持在“非活动”状态。

如何让这个频道运行?

【问题讨论】:

  • 您应该查看发送方和接收方 QM 上的错误日志,这应该会告诉您实际问题。

标签: ibm-mq


【解决方案1】:

乍一看,问题似乎出在您的端口上。 连接的名称应指定侦听器实际运行的端口。是1491还是1490?

CONNAME('127.0.0.1(1491)') //-- QM2 的监听器在 1490

验证侦听器是否正在为接收 qmgr 运行,并在您的 conname 中指定该端口。

【讨论】:

    【解决方案2】:

    发送方通道进入重试状态的原因可能有很多。

    1.参数错误。

    按照 Valerie 的建议检查连接名称。确保 IP 地址和端口号指向接收方队列管理器。

    2。传输队列不可用。

    确保传输队列可用。注意:有时传输队列可用,但可能 GET 已禁用,在这种情况下,发送方通道也将进入重试状态。发送方通道以独占模式打开传输队列,这意味着如果传输队列被另一个应用程序(例如 RFHUTIL)打开,则发送方通道将无法访问传输队列,因此通道将进入重试状态。因此,请确保传输队列没有被其他应用程序打开。

    3。接收通道不可用。

    当接收方队列管理器关闭时,可能会出现这种情况。 另外,请确保接收方通道的名称与发送方通道的名称相同(在您的情况下似乎是正确的)。

    4.接收方通道和发送方通道乱序

    接收方通道和发送方通道维护一个用于消息传输的序列号。由于网络故障等环境问题,发送方和接收方通道之间的序列号可能会不一致。

    重置您的发送方和接收方通道以解决此问题。

    【讨论】:

    • 虽然您的前三个答案很好,但 4) 不正确。序列号错误是发生了非常糟糕的事情的迹象,绝不是网络故障的结果。建议简单地 RESET 并继续进行而不进行任何调查可能会导致消息丢失或重复。
    • @MoragHughson 根据我的经验,每当我们看到序列问题时,就是有人突然停止发送方/接收方通道并且消息仍在传输中。大多数情况下,我们会在不担心丢失消息的情况下进行频道重置。好吧,如果存在序列问题,发送方通道将进入重试状态,并且消息将堆积在传输队列中,这很可能已禁用 GET。我没有看到任何消息丢失的原因,除非在 txn 队列中留下未提交的消息,即使在队列未打开后也不会返回队列
    • @MoragHughson 您能否提供一些其他可能发生消息丢失的情况?
    • 如果您的通道末端出现乱序,则通道告诉您另一端尝试发送的消息序列号与预期不符。如果您告诉它重置,从而忽略序列号问题,则永远不会发送丢失的消息。如果您的序列号错误是由于在一端删除状态或或,即两个报告的数字之一是 1,那么您更有可能是安全的,因为该错误是由于队列管理删除或通道删除造成的。应调查所有其他情况。
    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2022-07-21
    相关资源
    最近更新 更多