Signatur
Beschreibung
mqseries_disc schließt eine zuvor mit mqseries_conn oder mqseries_connx geöffnete Verbindung zu einem IBM MQ (früher WebSphere MQ / MQSeries) Queue-Manager. Der Aufruf entspricht dem nativen MQDISC-Aufruf der MQ C-API.
Nach dem Aufruf ist der übergebene Verbindungs-Handle $hconn ungültig. Alle noch geöffneten Queues oder anderen Objekte, die über diesen Handle geöffnet wurden, sollten zuvor explizit mit mqseries_close geschlossen werden, um Ressourcenlecks zu vermeiden.
Der Erfolg oder Misserfolg des Aufrufs wird über die Ausgabeparameter $compCode (Completion Code) und $reason (Reason Code) signalisiert. Ein $compCode von MQCC_OK (0) zeigt Erfolg an; bei einem Fehler liefert $reason den IBM-MQ-spezifischen Fehlercode, der mit mqseries_strerror in einen lesbaren Text umgewandelt werden kann.
Diese Funktion ist Teil der mqseries-Erweiterung für PHP und setzt eine korrekt installierte und konfigurierte IBM MQ Client-Bibliothek voraus.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hconn Pflicht | resource | Der Verbindungs-Handle zum Queue-Manager, der zuvor durch mqseries_conn oder mqseries_connx erzeugt wurde. |
|
| $compCode Pflicht | resource | Ausgabeparameter (Referenz), der den Completion Code des Aufrufs enthält. Mögliche Werte: MQCC_OK (0), MQCC_WARNING (1), MQCC_FAILED (2). |
|
| $reason Pflicht | resource | Ausgabeparameter (Referenz), der den IBM-MQ-Reason-Code enthält, der den Completion Code näher beschreibt. Bei Erfolg ist der Wert MQRC_NONE (0). Der Wert kann mit mqseries_strerror in einen lesbaren Text umgewandelt werden. |
Rückgabewert
$compCode und $reason signalisiert.Beispiele
Verbindung zu einem Queue-Manager trennen
<?php
// Verbindung zum Queue-Manager herstellen
mqseries_conn('QM_TEST', $hconn, $compCode, $reason);
if ($compCode !== MQCC_OK) {
echo 'Verbindung fehlgeschlagen: ' . mqseries_strerror($reason);
exit(1);
}
echo 'Verbindung erfolgreich hergestellt.' . PHP_EOL;
// ... Warteschlangenoperationen durchführen ...
// Verbindung wieder trennen
mqseries_disc($hconn, $compCode, $reason);
if ($compCode !== MQCC_OK) {
echo 'Fehler beim Trennen der Verbindung: ' . mqseries_strerror($reason);
} else {
echo 'Verbindung erfolgreich getrennt.' . PHP_EOL;
}
Vollständiges Beispiel mit Queue öffnen und sauber schließen
<?php
// Verbindung herstellen
mqseries_conn('QM_PROD', $hconn, $compCode, $reason);
if ($compCode !== MQCC_OK) {
die('MQCONN fehlgeschlagen: ' . mqseries_strerror($reason));
}
// Queue öffnen
$mqDesc = [
'StrucId' => MQOD_DEFAULT,
'ObjectName' => 'TEST.QUEUE',
'ObjectType' => MQOT_Q,
];
mqseries_open($hconn, $mqDesc, MQOO_INPUT_AS_Q_DEF | MQOO_FAIL_IF_QUIESCING, $hobj, $compCode, $reason);
if ($compCode !== MQCC_OK) {
// Verbindung trotzdem sauber trennen
mqseries_disc($hconn, $compCode2, $reason2);
die('MQOPEN fehlgeschlagen: ' . mqseries_strerror($reason));
}
// ... Nachrichten verarbeiten ...
// Queue schließen
mqseries_close($hconn, $hobj, MQCO_NONE, $compCode, $reason);
if ($compCode !== MQCC_OK) {
echo 'Warnung beim Schließen der Queue: ' . mqseries_strerror($reason) . PHP_EOL;
}
// Verbindung trennen
mqseries_disc($hconn, $compCode, $reason);
if ($compCode !== MQCC_OK) {
echo 'Fehler beim Trennen: ' . mqseries_strerror($reason) . PHP_EOL;
} else {
echo 'Ressourcen sauber freigegeben.' . PHP_EOL;
}
// Wichtig · Fallstricke
Reihenfolge beachten: Alle mit mqseries_open geöffneten Objekte (Queues, Topics usw.) sollten vor dem Aufruf von mqseries_disc explizit mit mqseries_close geschlossen werden. IBM MQ schließt zwar verbleibende Objekte beim Disconnect implizit, allerdings können dabei uncommittete Transaktionen verloren gehen oder Rollbacks ausgelöst werden.
Transaktionen: Falls eine laufende Einheits-Transaktion (Unit of Work) offen ist, sollte diese vor dem Disconnect mit mqseries_back (Rollback) oder mqseries_cmit (Commit) abgeschlossen werden. Ein unkontrolliertes mqseries_disc führt in der Regel zu einem automatischen Rollback.
Fehlerbehandlung: Da mqseries_disc keinen direkten Rückgabewert liefert, müssen $compCode und $reason nach jedem Aufruf geprüft werden. Der Aufruf mqseries_strerror($reason) wandelt den numerischen Reason Code in eine lesbare Fehlermeldung um.