最近几天,我一直在尝试解决这个似乎被遗忘的问题,因为两个可用的PECL扩展(SAM和mqseries)都很长时间没有更新了。我已经尝试过这两个扩展,目前看来mqseries似乎可以让我走得更远,因为SAM拒绝连接,即使MQ命令行工具完美运行。我成功地创建了一个与我的队列管理器的连接,在下一步(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:目前这个问题还没有解决。我从头开始重建了项目,以解决构建时可能出现的任何问题。我仍然卡在MQOPEN返回2044上。样例在CLI中仍然运行得非常顺畅,因此这肯定与PECL扩展的安装有关。如果有人成功地在相当近期的64位PHP5环境中安装并运行PHP针对MQ,请告诉我...
更新#2:MQPUT1可以完美地工作,但我无法接收响应。目前,只有MQOPEN不起作用。问题是:当MQPUT1工作时,导致MQOPEN返回2044的原因是什么?我理解MQOPEN包括在内。