【发布时间】:2011-12-17 12:51:43
【问题描述】:
所以过去几天我一直在尝试解决这个似乎已经被遗忘的问题,因为很长一段时间都没有更新可用的两个 PECL 扩展(SAM 和 mqseries)。我都试过了,mqseries 似乎在这一点上让我走得最远,因为 SAM 拒绝让我建立连接,即使 MQ 从命令行完美运行。我已成功创建与我的 QueueManager 的连接,但在下一步 (MQOPEN) 中我惨遭失败:
$mqcno = array(
'Version' => MQSERIES_MQCNO_VERSION_2,
'Options' => MQSERIES_MQCNO_STANDARD_BINDING,
'MQCD' => array('ChannelName' => '[channel]',
'ConnectionName' => '[ipnumber]([port])',
'TransportType' => MQSERIES_MQXPT_TCP)
);
mqseries_connx('MQED', $mqcno, $conn, $comp_code,$reason);
if ($comp_code !== MQSERIES_MQCC_OK) {
printf("Connx CompCode:%d Reason:%d Text:%s<br>\n", $comp_code, $reason, $reason);
exit;
}
$mqods = array('ObjectName'=>'MYPUTQUEUE', 'ObjectType'=>MQOT_Q, 'ObjectQMgrName'=>'MYQUEUEMANAGER');
mqseries_open($conn, $mqods,
MQSERIES_MQOO_FAIL_IF_QUIESCING | MQSERIES_MQOO_OUTPUT,
$obj, $comp_code,$reason);
这会导致 $reason 被填充 2044,它转换为 MQRC_OD_ERROR,或英文:“在 MQOPEN 或 MQPUT1 调用中,对象描述符 MQOD 无效”。
所以问题是,我的 MQOD 出了什么问题?
更新 #1:此时尚未解决。我从头开始重建项目,以解决构建时的任何问题。我仍然卡在返回 2044 的 MQOPEN 上。样本仍然可以从 CLI 完美运行,所以这肯定与 PECL 扩展的安装有关。如果有人在最近的 64 位 PHP5 环境中成功安装并针对 MQ 运行 PHP,请告诉我...
更新 #2:MQPUT1 完美地解决了我无法收到回复的问题。此时,只有 MQOPEN 不起作用。问题是;是什么导致 MQOPEN 在 MQPUT1 工作时返回 2044,据我所知包括 MQOPEN?
【问题讨论】:
-
我已经成功地创建了与我的 QueueManager 的连接,并且在下一步 (MQCONN) 中我惨遭失败... 你是否意味着它已开启它失败的 MQOpen?
-
是的,对不起。我已经编辑了我的问题。
-
我不熟悉 PHP 模块,但 'DeviceName' 似乎是队列名称的奇怪键。
-
也许这就是问题所在。但这就是官方示例的做法:php.net/manual/en/function.mqseries-open.php
-
但在该示例中,哈希键是 ObjectName,它与 cmqc.h 字段名称匹配。 DeviceName 是从哪里来的?
标签: php integration mq ibm-mq