Signatur
Beschreibung
ZookeeperOperationTimeoutException ist eine Ausnahme, die ausgelöst wird, wenn eine Operation gegenüber einem ZooKeeper-Server nicht innerhalb des konfigurierten Zeitrahmens abgeschlossen werden kann. Sie erbt von ZookeeperException und gehört damit zur Hierarchie der ZooKeeper-spezifischen Fehlerbehandlung in PHP.
ZooKeeper ist ein verteilter Koordinationsdienst, der für Aufgaben wie Leader-Wahl, Konfigurationsverwaltung und Synchronisation in verteilten Systemen eingesetzt wird. Zeitüberschreitungen können auftreten, wenn der ZooKeeper-Server überlastet ist, Netzwerkprobleme bestehen oder die Session-Timeout-Konfiguration zu knapp bemessen ist.
In der Praxis sollte diese Ausnahme separat von anderen ZooKeeper-Fehlern abgefangen werden, um eine gezielte Fehlerbehandlung zu ermöglichen – beispielsweise durch erneute Verbindungsversuche (Retry-Logik) oder das Ausweichen auf einen anderen ZooKeeper-Knoten.
Die Klasse selbst stellt keine zusätzlichen Methoden oder Eigenschaften bereit; die vollständige Fehlerinformation wird über die geerbten Methoden getMessage(), getCode() und getTrace() aus Exception bereitgestellt.
Beispiele
Timeout-Ausnahme bei ZooKeeper-Verbindung abfangen
<?php
try {
$zk = new Zookeeper('zookeeper-host:2181');
// Wert eines Knotens lesen
$data = $zk->get('/mein/knoten');
echo 'Daten: ' . $data;
} catch (ZookeeperOperationTimeoutException $e) {
// Gezielter Umgang mit Zeitüberschreitungen
echo 'ZooKeeper-Zeitüberschreitung: ' . $e->getMessage() . PHP_EOL;
echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
// Hier könnte Retry-Logik oder Fallback-Verhalten implementiert werden
} catch (ZookeeperException $e) {
// Alle anderen ZooKeeper-Fehler
echo 'ZooKeeper-Fehler: ' . $e->getMessage() . PHP_EOL;
} catch (Exception $e) {
echo 'Allgemeiner Fehler: ' . $e->getMessage() . PHP_EOL;
}
Retry-Mechanismus bei Zeitüberschreitung
<?php
function leseZookeeperKnoten(string $pfad, int $maxVersuche = 3): ?string {
$versuch = 0;
while ($versuch < $maxVersuche) {
try {
$zk = new Zookeeper('zookeeper-host:2181');
return $zk->get($pfad);
} catch (ZookeeperOperationTimeoutException $e) {
$versuch++;
echo "Versuch {$versuch} fehlgeschlagen (Timeout). " .
($versuch < $maxVersuche ? 'Neuer Versuch...' : 'Aufgabe.') . PHP_EOL;
if ($versuch < $maxVersuche) {
sleep(1); // Kurz warten vor erneutem Versuch
}
}
}
return null;
}
$ergebnis = leseZookeeperKnoten('/config/datenbankhost');
if ($ergebnis === null) {
echo 'Knoten konnte nicht gelesen werden.' . PHP_EOL;
} else {
echo 'Gelesener Wert: ' . $ergebnis . PHP_EOL;
}
// Wichtig · Fallstricke
Wichtig: Die ZookeeperOperationTimeoutException ist nur verfügbar, wenn die PHP-Erweiterung zookeeper installiert und aktiviert ist (PECL-Paket zookeeper). Ohne diese Erweiterung ist die Klasse nicht definiert.
Der zugehörige Fehlercode ist in der Regel -7 (ZOPERATIONTIMEOUT). Bei der Diagnose von Timeout-Problemen sollte neben der Fehlerbehandlung im Code auch die ZooKeeper-Session-Konfiguration (Session-Timeout in Millisekunden) sowie die Netzwerklatenz überprüft werden.
Zeitüberschreitungen in verteilten Systemen können transient sein; eine einfache Retry-Logik mit exponentiellem Backoff ist in Produktionssystemen der blindes-Retry empfehlenswert.