1

有没有人成功使用 PHP/Linux 连接到 MQ?几天来,我一直在拼命地试图让它发挥作用,但无济于事。如果有人在做这个,怎么做?

正如我所看到的,有两个扩展可供使用:a) mqseries -> C API 的精简包装 b) SAM 1.1.0 -> 采用更通用的方法

我已经尝试了这两种方法,但是对于 a) 我能够成功执行 MQCONNX,但不能成功执行 MQOPEN,并且对于 b) 我没有超过 MQCONN 阶段。我已经尝试过 7 和 6 客户端。我们的服务器正在运行 6.0.0.0。

笔记; 多年来,我们一直使用 .NET 成功连接到服务器。

所以这就是我到目前为止所做的:

  1. 从 RPM 包安装 MQClient
  2. 安装 IA94/XMS
  3. 成功构建了 sam_xms.so 扩展并将其包含在我的 php.ini 中
  4. Successyl 构建了 mqseries.so 扩展并将其包括在内。
  5. 已成功从 mq 客户端安装(amqsputc 和 amqsgetc)运行样本并来回传递消息。

使用 mqseries PECL 扩展这是我得到的错误:

MQOPEN failed; CompCode:2 Reason:2044 Text:2044

使用 SAM PECL 扩展我得到了这个:

<--SAMConnection.SetDebug()
-->SAMConnection.Connect()
-->SAMConnection.Create(proto=wmq:client)
   SAMConnection.Create() get_cfg_var() ""
   SAMConnection.Create() calling factory - SAM/sam_factory_xms.php
   SAMConnection.Create() rc = SAMXMSConnection
<--SAMConnection.Create()
   SAMConnection.Connect() connection created for protocol wmq:client
   SAMConnection.Connect() connect failed (208) Unable to create XMS connection!
<--SAMConnection.Connect() rc=
-->SAMConnection.IsConnected()
   SAMConnection.IsConnected() isconnected failed (208) Unable to create XMS connection!
<--SAMConnection.IsConnected() rc=
Connection failed (208) Unable to create XMS connection!

这些错误都不会在 /var/mqm/errors 中生成任何内容...

这是我的 mqseries 示例代码:

mqseries_conn('MQED', $conn, $comp_code, $reason);
if ($comp_code !== MQSERIES_MQCC_OK) {
    printf("<br>MQCONNX failed; Connx CompCode:%d Reason:%d Text:%s<br>\n", $comp_code, $reason, $reason);
    exit;
}
else
{
    printf("<br>MQCONNX successful: Connx CompCode:%d Reason:%d Text:%s<br>\n<br>", $comp_code, $reason, $reason);
}

$mqods = array('ObjectName'=>'MYPUTQUEUE');
mqseries_open($conn, $mqods, 
          MQSERIES_MQOO_INPUT_AS_Q_DEF | MQSERIES_MQOO_FAIL_IF_QUIESCING | MQSERIES_MQOO_OUTPUT,
          $obj, $comp_code,$reason);

if ($comp_code !== MQSERIES_MQCC_OK) {
printf("<br><br>MQOPEN failed; CompCode:%d Reason:%d Text:%s<br><br>", 
        $comp_code, 
        $reason, 
        $reason);
}
else
{
printf("<br><br>MQOPEN successful; CompCode:%d Reason:%d Text:%s<br><br>", 
        $comp_code, 
        $reason, 
        $reason);
}

这是使用 SAM 扩展的示例代码:

$conn->connect(SAM_WMQ_CLIENT, array(SAM_BROKER => 'MQED',SAM_TRANSACTIONS => SAM_MANUAL));

if($conn->isConnected())
{
    $msg = new SAMMessage('MY MESSAGE');

    $msg->header->SAM_REPLY_TO = 'MYGETQUEUE';
    $correlid = $conn->send('MYPUTQUEUE', $msg);

    if (!$correlid) {
    // The Send failed!
        echo "Send failed ($conn->errno) $conn->error";
    } else {
        $resp = $conn->receive('MYGETQUEUE', array(SAM_CORRELID => $correlid));
    }

    $conn->disconnect();
}
else
{
    echo "Connection failed ($conn->errno) $conn->error";
}

提前谢谢大家!

请注意,这是关于尝试使用 PHP 连接到 MQ的讨论的延续;差不多好了

更新 #1:MQPUT1 有效,但 MQOPEN 仍返回 2044。

4

0 回答 0