Signatur
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_connecthergestellt worden sein. - Die Transaktion bleibt offen, bis sie explizit mit
stomp_commitoderstomp_abortbeendet 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
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 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);
?>
// 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.