Start · Sprachen · PHP · Referenz · ZMQDeviceException

ZMQDeviceException

Klasse

Wird ausgelöst, wenn beim Betrieb eines <code>ZMQDevice</code>-Geräts ein Fehler auftritt.

Kategorie: error

Signatur

class ZMQDeviceException extends ZMQException

Beschreibung

ZMQDeviceException ist eine spezialisierte Ausnahme-Klasse der ZMQ-Erweiterung (ZeroMQ für PHP) und wird geworfen, wenn eine Operation auf einem ZMQDevice-Objekt fehlschlägt. Sie erbt von ZMQException und damit indirekt von Exception.

Ein ZMQDevice dient als Nachrichtenweiterleiter (z. B. Queue-Device, Forwarder, Streamer) zwischen ZMQ-Sockets. Typische Fehlerursachen sind ungültige Socket-Konfigurationen, fehlende Verbindungen oder Ressourcenprobleme beim Start des Geräts.

Mit den von Exception geerbten Methoden getMessage(), getCode() und getTrace() lassen sich Fehlerursache und Kontext analysieren. Der Fehlercode entspricht dabei in der Regel dem ZMQ-internen errno-Wert.

Beispiele

ZMQDevice starten und ZMQDeviceException abfangen

<?php
try {
    $context = new ZMQContext();

    // Frontend-Socket (empfängt Anfragen)
    $frontend = new ZMQSocket($context, ZMQ::SOCKET_ROUTER);
    $frontend->bind('tcp://127.0.0.1:5559');

    // Backend-Socket (leitet Anfragen weiter)
    $backend = new ZMQSocket($context, ZMQ::SOCKET_DEALER);
    $backend->bind('tcp://127.0.0.1:5560');

    // Device als Queue/Broker starten
    $device = new ZMQDevice($frontend, $backend);
    $device->run();
} catch (ZMQDeviceException $e) {
    echo 'ZMQDevice-Fehler: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
} catch (ZMQException $e) {
    echo 'Allgemeiner ZMQ-Fehler: ' . $e->getMessage() . PHP_EOL;
}
ZMQDevice-Fehler: <Fehlermeldung je nach Konfiguration>

ZMQDevice mit Timer-Callback und Fehlerbehandlung

<?php
try {
    $context = new ZMQContext();

    $frontend = new ZMQSocket($context, ZMQ::SOCKET_PULL);
    $frontend->bind('tcp://127.0.0.1:5561');

    $backend = new ZMQSocket($context, ZMQ::SOCKET_PUSH);
    $backend->bind('tcp://127.0.0.1:5562');

    $device = new ZMQDevice($frontend, $backend);

    // Idle-Callback alle 1000 ms
    $device->setIdleTimeout(1000);
    $device->setIdleCallback(function () {
        echo 'Device läuft...' . PHP_EOL;
        // Rückgabewert false beendet das Device
        return true;
    });

    $device->run();
} catch (ZMQDeviceException $e) {
    fprintf(STDERR, "ZMQDevice-Fehler [%d]: %s\n", $e->getCode(), $e->getMessage());
}
Device läuft...

// Wichtig · Fallstricke

Erweiterung erforderlich: ZMQDeviceException steht nur zur Verfügung, wenn die PECL-Erweiterung zmq installiert und aktiviert ist. Sie ist nicht Teil der PHP-Standardinstallation.

Fehlercode: Der über getCode() zurückgegebene Wert entspricht dem ZMQ-internen Fehlercode (errno), der mit der C-Funktion zmq_strerror() aufgelöst werden kann. Typische Codes sind EINTR (durch Signal unterbrochen) oder ETERM (Context wurde beendet).

Hierarchie: ZMQDeviceException extends ZMQException extends Exception — es empfiehlt sich, immer spezifisch ZMQDeviceException vor ZMQException abzufangen, um gezielte Fehlerbehandlung zu ermöglichen.