Signatur
Beschreibung
stomp_abort() ist die prozedurale Variante der objektorientierten Methode Stomp::abort() und wird verwendet, um eine zuvor mit stomp_begin() gestartete Transaktion abzubrechen. Alle Nachrichten, die innerhalb dieser Transaktion gesendet wurden, werden vom Message-Broker verworfen, als wären sie nie gesendet worden.
STOMP (Simple Text Oriented Message Protocol) ist ein Protokoll zur Kommunikation mit Message-Brokern wie Apache ActiveMQ oder RabbitMQ. Transaktionen ermöglichen es, mehrere Nachrichten atomar zu behandeln – entweder werden alle erfolgreich übermittelt (stomp_commit()) oder alle abgebrochen (stomp_abort()).
Diese Funktion ist besonders nützlich bei Fehlerbehandlung: Wenn während der Verarbeitung ein Fehler auftritt und bereits gesendete Nachrichten zurückgenommen werden müssen, kann stomp_abort() aufgerufen werden, um die Transaktion sauber zu beenden, ohne den Broker in einem inkonsistenten Zustand zu hinterlassen.
Hinweis: stomp_abort() steht nur zur Verfügung, wenn die PECL-Erweiterung stomp installiert ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $link Pflicht | resource | Die STOMP-Verbindungsressource, die von stomp_connect() zurückgegeben wurde. |
|
| $transaction_id Pflicht | string | Die eindeutige Transaktions-ID, die zuvor bei stomp_begin() angegeben wurde und jetzt abgebrochen werden soll. |
|
| $headers | array | [] | Optionale zusätzliche Header, die als assoziatives Array an den STOMP-Broker übermittelt werden (z. B. ['receipt' => 'yes']). |
Rückgabewert
true zurück, wenn die Transaktion erfolgreich abgebrochen wurde, oder false im Fehlerfall. Fehlermeldungen können mit stomp_error() abgerufen werden.Beispiele
Transaktion nach einem Fehler abbrechen
<?php
$link = stomp_connect('tcp://localhost:61613');
if (!$link) {
die('Verbindung fehlgeschlagen: ' . stomp_connect_error());
}
$transactionId = 'tx-001';
// Transaktion starten
stomp_begin($link, $transactionId);
try {
// Nachricht innerhalb der Transaktion senden
stomp_send($link, '/queue/orders', 'Bestellung #42', [
'transaction' => $transactionId,
]);
// Simulierter Fehler
throw new RuntimeException('Fehler bei der Verarbeitung der Bestellung.');
// Würde bei Erfolg aufgerufen:
// stomp_commit($link, $transactionId);
} catch (RuntimeException $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
// Transaktion abbrechen
stomp_abort($link, $transactionId);
echo 'Transaktion abgebrochen.' . PHP_EOL;
}
stomp_close($link);
Transaktion mit Receipt-Header abbrechen
<?php
$link = stomp_connect('tcp://localhost:61613');
if (!$link) {
die('Verbindung fehlgeschlagen: ' . stomp_connect_error());
}
$transactionId = 'tx-002';
stomp_begin($link, $transactionId);
stomp_send($link, '/queue/test', 'Testnachricht', [
'transaction' => $transactionId,
]);
// Transaktion mit optionalem Receipt-Header abbrechen
$result = stomp_abort($link, $transactionId, ['receipt' => 'abort-receipt-002']);
if ($result) {
echo 'Transaktion ' . $transactionId . ' erfolgreich abgebrochen.' . PHP_EOL;
} else {
echo 'Fehler beim Abbrechen: ' . stomp_error($link) . PHP_EOL;
}
stomp_close($link);
// Wichtig · Fallstricke
PECL-Erweiterung erforderlich: stomp_abort() ist Teil der PECL-Erweiterung stomp, die separat installiert werden muss (pecl install stomp). Sie ist nicht Bestandteil der PHP-Standardinstallation.
Transaktions-ID: Die angegebene $transaction_id muss exakt mit der ID übereinstimmen, die bei stomp_begin() verwendet wurde. Eine falsche oder bereits beendete Transaktions-ID führt zu einem Fehler auf Broker-Seite.
Objektorientierende Alternative: Statt der prozeduralen Funktion kann auch die OOP-Methode Stomp::abort(string $transactionId, array $headers = []): bool verwendet werden, die identisches Verhalten bietet.