IBM Cast Iron:MQ Put活动问题

时间:2015-07-15 06:41:52

标签: ibm-mq cast-iron

我正在尝试从部署在Cast Iron Live上的Orchestration将消息放入Websphere MQ队列。我使用了安全连接器,因为orchestation部署在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组。但这似乎也很有用。

1 个答案:

答案 0 :(得分: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或更高版本上提及,除非有特殊规定允许管理员连接,否则保证失败。它可能实际上是因为授权错误而失败而且连接器没有报告正确的错误。
  4. 如果它像听众没有运行一样简单,那就很容易修复。只需启动它,并确保按照预期在1414上进行。

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

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

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

    出于安全原因SYSTEM.DEF.*SYSTEM.AUTO.*渠道, 永远不会 用于合法连接。最佳实践是定义新的SVRCONN,例如名为CAST.IRON.SVRCONN的{​​{1}},然后定义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但只针对该频道的新规则。