Start · Sprachen · PHP · Referenz · ZMQException

ZMQException

Klasse

Basis-Ausnahmeklasse der ZMQ-Erweiterung, die bei Fehlern in ZeroMQ-Operationen ausgelöst wird.

Kategorie: error

Signatur

class ZMQException extends RuntimeException

Beschreibung

ZMQException ist die gemeinsame Basisklasse aller Ausnahmen, die von der PHP-ZMQ-Erweiterung (ZeroMQ) geworfen werden. Sie erweitert RuntimeException aus der PHP-Standardbibliothek und stellt damit die vertraute Exception-Hierarchie zur Verfügung.

Konkrete Unterklassen wie ZMQSocketException, ZMQContextException, ZMQPollException und ZMQDeviceException werden für spezifische Fehlersituationen verwendet. Durch das Abfangen von ZMQException lassen sich daher alle ZMQ-bezogenen Fehler zentral behandeln, ohne jede Unterklasse einzeln aufführen zu müssen.

Typische Fehlerquellen sind ungültige Socket-Optionen, fehlgeschlagene Verbindungsversuche oder Ressourcenerschöpfung im ZeroMQ-Context. Der Fehler-Code (getCode()) entspricht dabei dem systemnahen errno-Wert von ZeroMQ, was eine genaue Diagnose ermöglicht.

Beispiele

Alle ZMQ-Fehler zentral abfangen

<?php
try {
    $context = new ZMQContext();
    $socket  = $context->getSocket(ZMQ::SOCKET_REQ, 'my-requester');

    // Verbindung zu einem nicht vorhandenen Endpunkt
    $socket->connect('tcp://127.0.0.1:9999');
    $socket->send('Hello');

    // recv() mit NOBLOCK, um einen Timeout-Fehler zu provozieren
    $reply = $socket->recv(ZMQ::MODE_NOBLOCK);
} catch (ZMQException $e) {
    echo 'ZMQ-Fehler: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehler-Code (errno): ' . $e->getCode() . PHP_EOL;
}
ZMQ-Fehler: ZMQ\Socket::recv(): not in blocking mode, no messages available Fehler-Code (errno): 11

Unterscheidung von ZMQ-Unterklassen

<?php
try {
    $context = new ZMQContext();
    $socket  = $context->getSocket(ZMQ::SOCKET_PUB);

    // Ungültige Socket-Option setzen
    $socket->setSockOpt(9999, 'invalid');
} catch (ZMQSocketException $e) {
    // Spezifischer Fehler beim Socket
    echo 'Socket-Fehler: ' . $e->getMessage() . PHP_EOL;
} catch (ZMQException $e) {
    // Fallback für alle anderen ZMQ-Fehler
    echo 'Allgemeiner ZMQ-Fehler: ' . $e->getMessage() . PHP_EOL;
} catch (Exception $e) {
    echo 'Sonstiger Fehler: ' . $e->getMessage() . PHP_EOL;
}
Socket-Fehler: ZMQ\Socket::setSockOpt(): Unknown option key

// Wichtig · Fallstricke

Fehler-Codes: Der über getCode() zurückgegebene Wert entspricht dem errno-Wert aus der nativen ZeroMQ-Bibliothek (z. B. EAGAIN = 11, ETERM = 156384765). Diese Codes können plattformabhängig variieren.

Voraussetzung: Die ZMQ-Erweiterung (pecl/zmq) muss installiert und in der php.ini aktiviert sein. Sie ist nicht Teil der PHP-Kerninstallation.

Hierarchie: Alle spezifischen ZMQ-Ausnahmen (ZMQSocketException, ZMQContextException, ZMQPollException, ZMQDeviceException) erben von ZMQException, sodass ein einzelner catch (ZMQException $e)-Block ausreicht, um sämtliche ZMQ-Fehler abzufangen.