Start · Sprachen · PHP · Referenz · stomp_begin

stomp_begin

Funktion

Startet eine Transaktion auf einer STOMP-Verbindung, sodass Nachrichten atomar gesendet oder empfangen werden können.

seit PHP 0.1.0 Kategorie: misc

Signatur

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

Beschreibung

stomp_begin ist der prozedurale Stil zum Starten einer Transaktion über das STOMP-Protokoll (Simple Text Oriented Messaging Protocol). Alle Nachrichten, die nach dem Aufruf dieser Funktion gesendet oder bestätigt werden, gehören zur angegebenen Transaktion und werden erst mit stomp_commit endgültig übertragen oder mit stomp_abort rückgängig gemacht.

Das STOMP-Protokoll wird häufig zusammen mit Message-Brokern wie Apache ActiveMQ oder RabbitMQ verwendet, um eine transaktionale Verarbeitung von Nachrichten sicherzustellen. Transaktionen ermöglichen es, mehrere Sendevorgänge oder Bestätigungen (stomp_ack) als eine atomare Einheit zu behandeln.

Die Funktion ist der prozedurale Gegenpart zur objektorientierten Methode Stomp::begin(). Als Transaktions-ID sollte eine eindeutige Zeichenkette vergeben werden, die anschließend bei stomp_commit oder stomp_abort angegeben wird, um die Transaktion korrekt zu identifizieren.

  • Vor dem Aufruf muss eine aktive STOMP-Verbindung über stomp_connect hergestellt worden sein.
  • Die Transaktion bleibt offen, bis sie explizit mit stomp_commit oder stomp_abort beendet wird.

Parameter

Name Typ Default Beschreibung
$link Pflicht resource Eine STOMP-Verbindungsressource, die zuvor mit stomp_connect erzeugt wurde.
$transaction_id Pflicht string Eine eindeutige Zeichenkette, die die Transaktion identifiziert. Dieselbe ID muss bei stomp_commit oder stomp_abort angegeben werden.
$headers array [] Optionales assoziatives Array mit zusätzlichen Headern, die an den Broker gesendet werden sollen (z. B. benutzerdefinierte Metadaten).

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Transaktion erfolgreich gestartet wurde, oder false bei einem Fehler (z. B. ungültige Verbindungsressource oder Netzwerkproblem).

Beispiele

Transaktion starten, Nachricht senden und committen

<?php
// Verbindung zum STOMP-Broker herstellen
$link = stomp_connect('tcp://localhost:61613');

if (!$link) {
    die('Verbindung zum Broker fehlgeschlagen: ' . stomp_connect_error());
}

$transactionId = 'tx-' . uniqid();

// Transaktion starten
if (stomp_begin($link, $transactionId)) {
    // Nachricht innerhalb der Transaktion senden
    stomp_send($link, '/queue/bestellungen', 'Bestellung #12345', [
        'transaction' => $transactionId
    ]);

    // Transaktion erfolgreich abschließen
    stomp_commit($link, $transactionId);
    echo "Transaktion $transactionId erfolgreich abgeschlossen.\n";
} else {
    echo "Transaktion konnte nicht gestartet werden.\n";
}

stomp_close($link);
?>
Transaktion tx-63f8a1b2c4e12 erfolgreich abgeschlossen.

Transaktion bei Fehler abbrechen (Rollback)

<?php
$link = stomp_connect('tcp://localhost:61613');

if (!$link) {
    die('Verbindung fehlgeschlagen.');
}

$transactionId = 'tx-' . uniqid();

stomp_begin($link, $transactionId);

try {
    stomp_send($link, '/queue/auftraege', 'Auftrag A', [
        'transaction' => $transactionId
    ]);

    // Simulierter Fehler
    throw new RuntimeException('Verarbeitungsfehler aufgetreten.');

    stomp_commit($link, $transactionId);
} catch (RuntimeException $e) {
    // Transaktion zurückrollen
    stomp_abort($link, $transactionId);
    echo "Fehler: " . $e->getMessage() . " — Transaktion abgebrochen.\n";
}

stomp_close($link);
?>
Fehler: Verarbeitungsfehler aufgetreten. — Transaktion abgebrochen.

// Wichtig · Fallstricke

Erweiterungsstatus: Die STOMP-Erweiterung für PHP ist eine PECL-Erweiterung (pecl/stomp) und nicht Bestandteil der PHP-Standardinstallation. Sie muss separat installiert und in der php.ini aktiviert werden. Ab PHP 7 kann die Kompatibilität variieren — es empfiehlt sich, moderne Alternativen wie die stomp-php-Bibliothek zu verwenden.

Header: Beim Senden oder Bestätigen von Nachrichten innerhalb einer Transaktion muss der Header 'transaction' mit der entsprechenden Transaktions-ID gesetzt werden, damit der Broker die Nachricht korrekt der Transaktion zuordnet.

Fehlerbehandlung: Im Fehlerfall kann stomp_error verwendet werden, um die letzte Fehlermeldung der Verbindung abzurufen.