【问题标题】:cannot connect from MQ Client to MQ qmgr(client mode)无法从 MQ 客户端连接到 MQ qmgr(客户端模式)
【发布时间】:2025-12-15 00:15:03
【问题描述】:

我有两台 linux 服务器,一台装有 MQ 服务器版本 8.0.0.6,另一台装有 MQ 客户端 8.0.0.4。部署在客户端(WebSphere Application)中的应用程序无法连接到 MQ 服务器,它给我一个错误提示:

JMSWMQ0018: Failed to connect to queue manager 'AEDMQ03A' with connection mode 'Client' and host name 'hostname(1414)'

我在 MQ 服务器中验证了队列管理器 AEDMQ03A 正在运行,AEDMQ03A 侦听器正在端口 1414 上运行。我还可以使用 telnet MQhost 1414 建立从客户端到服务器的连接。

我检查了 qmgr AEDMQ03A(在 MQServer 中)的通道:

DISPLAY CHANNEL(AEDMQ03A,*) ALL

但我没有找到从 AEDMQ03A 到 MQ 客户端主机的任何通道。我知道创建频道的命令是:

DEFINE CHANNEL(JAVA.CHANNEL) CHLTYPE(SVRCONN) TRPTYPE(TCP)

在这种特殊情况下,它类似于DEFINE CHANNEL(AEDMQ03A.X) CHLTYPE(Y) TRPTYPE(TCP),但我不太确定在 X 变量上键入什么,因为在 MQ 客户端中没有创建 qmgrs。如果我想要从 MQ 客户端到 MQServer 的连接,我不知道应该是什么通道类型。


我创建了一个本地队列 (QUEUE_TEST) 来测试从 MQ 客户端到 MQ 服务器中的 qmanager AEDMQ03A 的连接。我做了以下事情:

1) 启动 AEDMQ03A 队列管理器,同时确保监听器也启动

2) 使用命令创建 svrconn 通道:

DEFINE CHANNEL(A03ZCIWAS) CHLTYPE(SVRCONN) TRPTYPE(TCP)

在客户端:

set the MQSERVER=A03ZCIWAS/TCP/'ip_adress_MQServer(1414)'

然后当我尝试使用 ./amqsputc QUEUE_TEST AEDMQ03A 时,它给了我错误:

MQCONNX ended with reason code 2035

我知道这个错误是一个权限问题,我尝试用setmqaut -m AEDMQ03A -t qmgr -g mqm +alladm +set 解决它,但它仍然给我同样的错误。

【问题讨论】:

  • 您在客户端指定什么频道。在 SVRCONN 类型的队列管理器上定义了一个通道。在客户端上,您指定连接时要使用的通道名称。在某些情况下,您可以使用客户端通道定义表 (CCDT),它是一个二进制文件,其中包含被称为 CLNTCONN 通道的内容,但不需要在队列管理器上创建它们。
  • 如果您想查看正在运行的频道,您可以使用DIS CHS(*) 之类的命令。
  • 在队列管理器上检查/var/mqm/qmgrs/AEDMQ03A/errors/AMQERR01.LOG 下的日志,看看您在客户端尝试连接时是否收到任何错误。它可能是“找不到频道”或类似的东西。
  • 你看到我上面的cmets了吗?我在下面的答案中解决了您提出的问题。我认为关闭安全性的建议并不好,即使在测试情况下,您也应该正确设置,以便您了解生产情况下需要什么。
  • 在您的问题中,您声明MQ Server version 8.0.0.6 ,然后声明Client(WebSphere Application)。从 v8 开始,该产品不再使用 WebSphere 品牌,现在只是 IBM MQ。当您说WebSphere Application 时,您指的是在 WebSphere Application 服务器中运行的 IBM MQ Classes for JMS 应用程序吗?如果不是,您的应用程序是用什么类型的语言编写的?我注意到你在更新中提到了amqsputc,你会写一个 C 应用程序吗?

标签: ibm-mq


【解决方案1】:

你需要创建一个 SVRCONN 类型的频道

runmqsc > 定义通道(AEDMQ03A.SVRCONN) CHLTYPE(SVRCONN) TRPTYPE(TCP)

为了测试目的 [仅] 尝试禁用安全 - 如果您还没有为客户端用户执行“setmqaut”

runmqsc > SET CHLAUTH('AEDMQ03A.SVRCONN') TYPE(BLOCKUSER) USERLIST('nobody')

runmqsc > 更改 authinfo(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(NONE)

runmqsc > 刷新安全性 (*)

runmqsc > 结束

尝试连接并分享详细信息。

【讨论】:

  • 我用 svrconn 定义了一个通道,但我也为 clntconn 定义了 if。对吗?
  • 您不需要客户端连接通道即可连接。在这里查看答案:*.com/questions/11304163/…
  • 另外,您提到您正在尝试将 websphere 应用程序连接到 MQ,在这种情况下,您应该使用 QCF 连接到 MQ - 其中包含所有连接详细信息。关于安全性,我完全同意@JoshMc 的观点,即即使在测试环境中也不应禁用安全性,因为 PROD 设置来自您的测试环境。