Start · Sprachen · PHP · Referenz · ZookeeperConnectionException

ZookeeperConnectionException

Klasse

Wird geworfen, wenn eine Verbindung zum ZooKeeper-Dienst nicht hergestellt oder aufrechterhalten werden kann.

Kategorie: error

Signatur

class ZookeeperConnectionException extends ZookeeperException

Beschreibung

ZookeeperConnectionException ist eine spezialisierte Ausnahme aus der ZooKeeper-PECL-Extension, die ausgelöst wird, sobald Verbindungsprobleme mit dem ZooKeeper-Ensemble auftreten. Typische Ursachen sind ein nicht erreichbarer ZooKeeper-Server, ein Netzwerkausfall, ein abgelaufenes Session-Timeout oder ungültige Verbindungsparameter.

Sie erbt von ZookeeperException, die selbst von RuntimeException abstammt, und lässt sich damit gezielt in einem catch-Block abfangen, ohne andere ZooKeeper-Fehler oder allgemeine PHP-Ausnahmen zu maskieren. Das ermöglicht eine feingranulare Fehlerbehandlung, etwa um automatische Wiederverbindungsversuche oder Fallback-Logik zu implementieren.

Beim Arbeiten mit verteilten Systemen – z. B. Service-Discovery, verteilten Sperren oder Konfigurationsverwaltung via ZooKeeper – ist es ratsam, ZookeeperConnectionException explizit zu behandeln, da Verbindungsabbrüche in Produktionsumgebungen jederzeit auftreten können. Eine robuste Anwendung sollte auf diesen Fehlerfall vorbereitet sein und entsprechende Retry- oder Alerting-Mechanismen besitzen.

Beispiele

Verbindungsfehler gezielt abfangen

<?php
use Zookeeper;
use ZookeeperConnectionException;
use ZookeeperException;

try {
    // Verbindung zu einem nicht erreichbaren ZooKeeper-Server
    $zk = new Zookeeper('192.0.2.1:2181', null, 3000);
    $data = $zk->get('/myapp/config');
    echo $data;
} catch (ZookeeperConnectionException $e) {
    // Gezielt auf Verbindungsprobleme reagieren
    error_log('ZooKeeper-Verbindungsfehler: ' . $e->getMessage());
    echo 'Verbindung zum Konfigurationsdienst fehlgeschlagen. Bitte später erneut versuchen.';
} catch (ZookeeperException $e) {
    // Alle anderen ZooKeeper-Fehler
    error_log('ZooKeeper-Fehler: ' . $e->getMessage());
}
Verbindung zum Konfigurationsdienst fehlgeschlagen. Bitte später erneut versuchen.

Wiederholungsversuch bei Verbindungsabbruch

<?php
use Zookeeper;
use ZookeeperConnectionException;

function connectWithRetry(string $hosts, int $maxRetries = 3): Zookeeper {
    $attempt = 0;
    while ($attempt < $maxRetries) {
        try {
            $zk = new Zookeeper($hosts, null, 5000);
            echo "Verbindung hergestellt (Versuch " . ($attempt + 1) . ").\n";
            return $zk;
        } catch (ZookeeperConnectionException $e) {
            $attempt++;
            error_log("Verbindungsversuch {$attempt} fehlgeschlagen: " . $e->getMessage());
            if ($attempt < $maxRetries) {
                sleep(2); // Kurze Wartezeit vor erneutem Versuch
            }
        }
    }
    throw new RuntimeException("ZooKeeper nach {$maxRetries} Versuchen nicht erreichbar.");
}

try {
    $zk = connectWithRetry('127.0.0.1:2181');
} catch (RuntimeException $e) {
    echo $e->getMessage() . "\n";
}
ZooKeeper nach 3 Versuchen nicht erreichbar.

// Wichtig · Fallstricke

Achtung: Die ZooKeeper-PECL-Extension muss installiert und aktiviert sein (pecl install zookeeper), damit diese Klasse verfügbar ist. Sie ist kein Bestandteil der PHP-Standardbibliothek.

Session-Timeouts können auch bei zunächst erfolgreicher Verbindung auftreten, wenn der ZooKeeper-Server die Session als abgelaufen markiert. In diesem Fall kann ebenfalls eine ZookeeperConnectionException geworfen werden, obwohl die initiale Verbindung erfolgreich war. Es empfiehlt sich daher, Verbindungsfehler nicht nur beim initialen Verbindungsaufbau, sondern auch bei jeder ZooKeeper-Operation abzufangen.