3

我正在尝试从部署在 Cast Iron Live 上的编排将消息放入 Websphere MQ 队列。自从编排部署在 Cast Iron 上以来,我一直使用安全连接器。当我尝试执行流程时,它失败并且消息没有放在 MQ 队列中。以下是错误:

Error while trying to call remote operation execute on Secure Connector for activity
com.approuter.module.mq.activity.MqPut and Secure Connector LocalSecureConnector, 
error is Unable to put message on queue null. MQ returned error code 2538.

Unable to put message on queue null. MQ returned error code 2538.
Fault Name : Mq.Put.OperationActivityId : 163
Message: Unable to put message on queue null. MQ returned error code 2538.
Activity Name:Put MessageFault Time: 2015-07-15T05:40:29.711Z

有人可以帮我解决这个问题。如果需要任何进一步的细节,请告诉我。

以下是详细信息:

  1. Cast Iron Flow 部署在 Cast Iron Cloud 上,即 Cast Iron Live
  2. MQ 在本地运行
  3. 我尝试连接的端口是 1414。
  4. 在安装 MQ 的机器上运行一个安全连接器。
  5. MQ 版本为 8。
  6. 在 Cast Iron 流程中,我使用 MQ 连接器,通过提供运行 MQ 的主机名、端口:1414、通道名称:SYSTEM.DEF.SVRCONN 和用户名 mqm。厌倦了使用我的登录用户名,将其添加到 mqm 组。但这似乎也不起作用。
4

1 回答 1

2

返回代码具有指导意义:

2538  0x000009ea  MQRC_HOST_NOT_AVAILABLE

这表明 Cast Iron 正在尝试使用客户端连接联系 MQ,但未在其正在使用的主机/端口上找到侦听器。

这里有几种可能性,但没有足够的信息来说明它可能是什么。我将解释并提供一些您可以尝试的诊断。

  1. 2538 表示尝试联系 QMgr 失败。例如,这可能是因为 QMgr 未在配置的端口 (1414) 上侦听,或者 MQ 侦听器未运行。
  2. 错误代码显示队列名称为“null”。该问题未指定连接器配置的队列名称,但可能已配置了某些队列名称。此错误代码表明 MQ 服务器端的安全连接器未安装其配置。
  3. Cast Iron 文档建议使用mqm组中的 ID 进行连接,但没有提及在任何 MQ 版本 7.1 或更高版本上,除非做出特殊规定以允许管理员连接,否则这肯定会失败。可能是它实际上因授权错误而失败,并且连接器没有报告正确的错误。

如果它像侦听器不运行一样简单,那很容易修复。只需启动它并确保它按预期在 1414 上。

接下来,确保安全连接器具有使用 Cast Iron 管理面板创建的配置。您需要了解错误代码为何显示队列名称为空。

现在在 QMgr 中启用授权事件和通道事件并尝试再次连接。MQ 服务器上的连接器应该在启动时连接,如果成功,您可以通过查看 MQ 通道状态来看到这一点。但是,如果不成功,您可以通过查看事件消息或 MQ 错误日志来判断。如果连接已经到达那么远,这两个都将显示授权失败和连接尝试。

我期待 2035 授权错误失败的原因是 v7.1 及更高版本的任何 QMgr 默认情况下都允许在任何通道上进行管理连接。这是在默认CHLAUTH规则集中配置的。其目的是 MQ 管理员必须通过添加一个或多个新CHLAUTH规则来明确提供管理员访问权限。

出于安全SYSTEM.DEF.*SYSTEM.AUTO.*通道的原因,不应其用于合法连接。最佳实践是定义一个新SVRCONN的,例如一个命名CAST.IRON.SVRCONN的,然后定义一个 CHLAUTH 规则以允许管理连接。

例如:

DEFINE CHL(CAST.IRON.SVRCONN) CHLTYPE(SVRCONN) TRPTYPE(TCP) REPLACE
SET CHLAUTH('CAST.IRON.SVRCONN') TYPE(ADDRESSMAP) +
    ADDRESS('127.0.0.1') +
    USERSRC(MAP) MCAUSER('mqm') +
    ACTION(REPLACE) 
SET CHLAUTH('CAST.IRON.SVRCONN') TYPE(BLOCKUSER) +
    USERLIST('*NOBODY') +
    WARN(NO) ACTION(REPLACE)

第一条语句定义了新通道。

下一个允许127.0.0.1安全连接器所在的连接。(假设您将内部安全连接安装在与 MQ 相同的服务器上,是吗?) 理想情况下,连接器将在通道上使用 TLS,而不是 IP 过滤,CHLAUTH规则将根据证书可分辨名称进行过滤。此规则几乎没有那么严格,允许本地主机上的任何人通过使用此通道成为 MQ 管理员。

最后一条语句覆盖了默认CHLAUTH规则,该规则*MQADMIN使用一个新规则阻止*NOBODY但仅针对该通道进行阻止。

于 2015-07-15T22:04:24.500 回答