Подключение к MQ с использованием PHP / Linux - PullRequest
1 голос
/ 02 ноября 2011

Есть ли кто-нибудь, кто успешно использует PHP / Linux для подключения к MQ?В течение нескольких дней я отчаянно пытался заставить это работать, но безрезультатно.Если есть кто-нибудь, кто делает это, то как?

Как я вижу, есть два расширения, которые нужно использовать: a) mqseries -> тонкая оболочка для C API b) SAM 1.1.0 -> получениеболее общий подход

Я пробовал оба, но для а) Я могу успешно выполнять MQCONNX, но не для MQOPEN, а для б) Я не прошёл этап MQCONN.Я пробовал как 7, так и 6 клиентов.Наш сервер работает под управлением 6.0.0.0.

Примечание;мы успешно подключались к серверу с помощью .NET в течение многих лет.

Так вот, что я сделал до сих пор:

  1. Установил MQClient из RPM-пакетов
  2. Установлен IA94 / XMS
  3. Успешно собрал расширение sam_xms.so и включил его в мой php.ini
  4. Successfulyl построил расширение mqseries.so и включил его также.
  5. Успешно запустил Samples из установки клиента mq (amqsputc и amqsgetc) и передавал сообщения туда и обратно.

При использовании расширения PECL mqseries это ошибка, которую я получаю:

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";
}

Спасибо всем заранее!

Обратите внимание, что это продолжениеобсуждение Попытка коннт. д. в MQ с использованием PHP;почти там

Обновление № 1: MQPUT1 работает, но MQOPEN все еще возвращает 2044.

...