Start · Sprachen · PHP · Referenz · stomp_unsubscribe

stomp_unsubscribe

Funktion

Entfernt ein bestehendes Abonnement auf einem STOMP-Ziel (Queue oder Topic).

seit PHP 0.1.0 Kategorie: misc

Signatur

stomp_unsubscribe(resource $link, string $destination, array $headers = []): bool

Beschreibung

stomp_unsubscribe() hebt ein zuvor mit stomp_subscribe() eingerichtetes Abonnement auf einer STOMP-kompatiblen Nachrichtenwarteschlange oder einem Topic auf. Nach dem Aufruf werden keine weiteren Nachrichten mehr von diesem Ziel an den Client geliefert.

Die Funktion gehört zur prozeduralen Schnittstelle der STOMP-Erweiterung (PHP-pecl/stomp). Sie ist das prozedurale Äquivalent zur Methode Stomp::unsubscribe() der objektorientierten API. STOMP (Simple Text Oriented Messaging Protocol) wird häufig zusammen mit Message-Brokern wie ActiveMQ oder RabbitMQ eingesetzt.

Über den optionalen Parameter $headers können zusätzliche STOMP-Frame-Header mitgegeben werden, etwa eine id (Abonnement-ID), die beim ursprünglichen stomp_subscribe()-Aufruf gesetzt wurde. Wenn beim Abonnieren eine ID verwendet wurde, muss dieselbe ID auch beim Abbestellen übergeben werden.

Der Aufruf sollte vor dem Schließen der Verbindung erfolgen, um sicherzustellen, dass der Broker das Abonnement ordnungsgemäß aufhebt und keine Nachrichten verloren gehen oder unverarbeitet im Broker verbleiben.

Parameter

Name Typ Default Beschreibung
$link Pflicht resource Eine gültige STOMP-Verbindungsressource, die zuvor mit stomp_connect() geöffnet wurde.
$destination Pflicht string Das Ziel (Queue oder Topic), dessen Abonnement aufgehoben werden soll, z. B. /queue/bestellungen oder /topic/news. Muss exakt dem beim Abonnieren verwendeten Ziel entsprechen.
$headers array [] Optionales assoziatives Array mit zusätzlichen STOMP-Frame-Headern, z. B. ['id' => 'sub-001']. Wenn beim Abonnieren eine Abonnement-ID gesetzt wurde, muss diese hier mitübergeben werden.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler. Im Fehlerfall kann stomp_error() für eine Fehlerbeschreibung verwendet werden.

Beispiele

Einfaches Abbestellen einer Queue

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

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

// Queue abonnieren
stomp_subscribe($link, '/queue/bestellungen');

// Nachrichten verarbeiten...
// (hier vereinfacht weggelassen)

// Abonnement aufheben
if (stomp_unsubscribe($link, '/queue/bestellungen')) {
    echo 'Abonnement erfolgreich aufgehoben.' . PHP_EOL;
} else {
    echo 'Fehler: ' . stomp_error($link) . PHP_EOL;
}

// Verbindung schließen
stomp_close($link);
Abonnement erfolgreich aufgehoben.

Abbestellen mit expliziter Abonnement-ID

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

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

$subscribeHeaders = ['id' => 'sub-001', 'ack' => 'client'];

// Mit ID abonnieren
stomp_subscribe($link, '/topic/news', $subscribeHeaders);

// Nachrichten lesen (vereinfacht)
while (stomp_has_frame($link)) {
    $frame = stomp_read_frame($link);
    echo 'Nachricht: ' . $frame['body'] . PHP_EOL;
    stomp_ack($link, $frame['headers']['message-id']);
}

// Abonnement über ID aufheben
$unsubscribeHeaders = ['id' => 'sub-001'];
if (stomp_unsubscribe($link, '/topic/news', $unsubscribeHeaders)) {
    echo 'Topic-Abonnement (sub-001) aufgehoben.' . PHP_EOL;
} else {
    echo 'Fehler beim Aufheben: ' . stomp_error($link) . PHP_EOL;
}

stomp_close($link);
Topic-Abonnement (sub-001) aufgehoben.

// Wichtig · Fallstricke

Abonnement-IDs: Wenn beim stomp_subscribe()-Aufruf ein Header id gesetzt wurde, muss beim stomp_unsubscribe()-Aufruf dieselbe ID mitgegeben werden, da der Broker sonst das Abonnement nicht korrekt identifizieren kann. Einige Broker (z. B. ActiveMQ) verlangen bei bestimmten Versionen des STOMP-Protokolls zwingend eine Abonnement-ID.

PECL-Erweiterung: Die STOMP-Erweiterung ist nicht Teil des PHP-Kerns und muss über PECL installiert werden (pecl install stomp). Seit PHP 7.x wird die Erweiterung nur noch eingeschränkt gepflegt; für neue Projekte sollten alternative Bibliotheken wie stomp-php/stomp-php über Composer erwogen werden.

Fehlerbehandlung: Da die Funktion bei einem Fehler lediglich false zurückgibt, sollte der Rückgabewert stets geprüft und im Fehlerfall stomp_error() aufgerufen werden, um die Fehlerursache zu ermitteln.