Start · Sprachen · PHP · Referenz · GearmanException

GearmanException

Klasse

Ausnahmeklasse der Gearman-PECL-Erweiterung, die bei Fehlern in der Gearman-Kommunikation geworfen wird.

seit PHP 0.5.0 Kategorie: error

Signatur

class GearmanException extends Exception

Beschreibung

GearmanException ist die Basisausnahmeklasse der Gearman-PECL-Erweiterung und wird geworfen, wenn während der Interaktion mit dem Gearman-Job-Server oder beim Verarbeiten von Gearman-Aufgaben ein kritischer Fehler auftritt. Sie erbt von der PHP-Kernklasse Exception und verhält sich daher wie jede Standard-PHP-Ausnahme.

Typische Auslöser sind Verbindungsfehler zum Gearman-Server (z. B. falscher Host/Port), Zeitüberschreitungen oder Protokollfehler. Da die Gearman-Erweiterung auch Fehler über Rückgabecodes signalisiert (z. B. GEARMAN_ERRNO-Konstanten), wird GearmanException meist nur bei schwerwiegenden, nicht behebbaren Zuständen ausgelöst.

Um robuste Gearman-Clients und -Worker zu schreiben, sollten alle Aufrufe kritischer Gearman-Methoden in einem try/catch-Block für GearmanException gekapselt werden. Zusätzlich empfiehlt es sich, den Rückgabewert jeder Methode zu prüfen, da nicht alle Fehler als Ausnahme gemeldet werden.

Da GearmanException von Exception erbt, stehen alle Standardmethoden wie getMessage(), getCode() und getTrace() zur Verfügung.

Beispiele

Verbindungsfehler zum Gearman-Server abfangen

<?php
try {
    $client = new GearmanClient();
    // Ungültiger Host/Port – wird eine GearmanException auslösen
    $client->addServer('invalid-host', 9999);

    // do() blockiert bis ein Worker antwortet
    $result = $client->doNormal('reverse', 'Hello World');
    echo 'Ergebnis: ' . $result . PHP_EOL;
} catch (GearmanException $e) {
    echo 'Gearman-Fehler [' . $e->getCode() . ']: ' . $e->getMessage() . PHP_EOL;
} catch (Exception $e) {
    echo 'Allgemeiner Fehler: ' . $e->getMessage() . PHP_EOL;
}
Gearman-Fehler [1]: Failed to set exception option

GearmanException im Worker abfangen

<?php
try {
    $worker = new GearmanWorker();
    $worker->addServer('127.0.0.1', 4730);

    $worker->addFunction('reverse', function (GearmanJob $job): string {
        return strrev($job->workload());
    });

    echo 'Worker wartet auf Jobs ...' . PHP_EOL;
    while ($worker->work()) {
        if ($worker->returnCode() !== GEARMAN_SUCCESS) {
            echo 'Nicht-fataler Fehlercode: ' . $worker->returnCode() . PHP_EOL;
        }
    }
} catch (GearmanException $e) {
    // Fatale Verbindungs- oder Protokollfehler
    error_log('GearmanException im Worker: ' . $e->getMessage());
    exit(1);
}

// Wichtig · Fallstricke

Nicht alle Fehler werfen eine Ausnahme: Viele Gearman-Methoden geben stattdessen false zurück und setzen einen internen Fehlercode (abrufbar über returnCode() bzw. error()). Ein reines try/catch auf GearmanException ist daher nicht ausreichend – der Rückgabewert jeder Methode sollte zusätzlich geprüft werden.

PECL-Abhängigkeit: GearmanException ist nur verfügbar, wenn die gearman-PECL-Erweiterung installiert und aktiviert ist. Auf Systemen ohne diese Erweiterung führt das Referenzieren der Klasse zu einem fatalen Fehler. Nutze class_exists('GearmanException') zur Laufzeitprüfung, wenn die Erweiterung optional ist.