Start · Sprachen · PHP · Referenz · stomp_abort

stomp_abort

Funktion

Bricht eine laufende STOMP-Transaktion ab und macht alle innerhalb der Transaktion gesendeten Nachrichten rückgängig.

seit PHP 0.1.0 Kategorie: misc

Signatur

stomp_abort(resource $link, string $transaction_id, array $headers = []): bool

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

Typ
bool
Beschreibung
Gibt 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);
Fehler: Fehler bei der Verarbeitung der Bestellung. Transaktion abgebrochen.

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);
Transaktion tx-002 erfolgreich abgebrochen.

// 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.