Signatur
Beschreibung
MongoDB\Driver\ServerDescription ist eine schreibgeschützte Klasse des offiziellen MongoDB-PHP-Treibers, die einen Schnappschuss der vom SDAM (Server Discovery and Monitoring) ermittelten Eigenschaften eines bestimmten Servers repräsentiert. Sie enthält Informationen wie den Servertyp (Primary, Secondary, Standalone usw.), die gemessene Round-Trip-Latenz sowie das Ergebnis des zuletzt ausgeführten hello-Befehls.
Objekte dieser Klasse werden nicht direkt instanziiert, sondern über Methoden wie MongoDB\Driver\Server::getServerDescription() oder über MongoDB\Driver\Monitoring\ServerChangedEvent::getNewDescription() bzw. getOldDescription() bezogen. Sie sind daher typischerweise im Kontext von SDAM-Monitoring-Events relevant.
Mit ServerDescription lassen sich Topologie-Wechsel beobachten, eigene Monitoring-Logik implementieren oder Servertyp-basierte Routing-Entscheidungen treffen. Die Klasse ist besonders nützlich, wenn benutzerdefinierte MongoDB\Driver\Monitoring\SDAMSubscriber-Implementierungen eingesetzt werden.
Da die Klasse den Zustand eines Servers zu einem bestimmten Zeitpunkt widerspiegelt, sind ihre Rückgabewerte unveränderlich (immutable). Jede Änderung am Server erzeugt ein neues ServerDescription-Objekt.
Beispiele
Servertyp und Latenz eines verbundenen Servers ausgeben
<?php
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
// Alle bekannten Server abfragen
$servers = $manager->getServers();
foreach ($servers as $server) {
$desc = $server->getServerDescription();
echo 'Host: ' . $desc->getHost() . PHP_EOL;
echo 'Port: ' . $desc->getPort() . PHP_EOL;
echo 'Typ: ' . $desc->getType() . PHP_EOL;
echo 'Latenz: ' . $desc->getRoundTripTime() . ' ms' . PHP_EOL;
echo '---' . PHP_EOL;
}
SDAM-Monitoring: Serveränderungen beobachten
<?php
use MongoDB\Driver\Monitoring\SDAMSubscriber;
use MongoDB\Driver\Monitoring\ServerChangedEvent;
use MongoDB\Driver\Monitoring\ServerClosedEvent;
use MongoDB\Driver\Monitoring\ServerOpeningEvent;
use MongoDB\Driver\Monitoring\TopologyChangedEvent;
use MongoDB\Driver\Monitoring\TopologyClosedEvent;
use MongoDB\Driver\Monitoring\TopologyOpeningEvent;
use MongoDB\Driver\Monitoring\ServerHeartbeatFailedEvent;
use MongoDB\Driver\Monitoring\ServerHeartbeatStartedEvent;
use MongoDB\Driver\Monitoring\ServerHeartbeatSucceededEvent;
class MyServerMonitor implements SDAMSubscriber
{
public function serverChanged(ServerChangedEvent $event): void
{
$old = $event->getOldDescription();
$new = $event->getNewDescription();
printf(
'Server %s:%d geändert: %s -> %s' . PHP_EOL,
$new->getHost(),
$new->getPort(),
$old->getType(),
$new->getType()
);
}
public function serverClosed(ServerClosedEvent $event): void {}
public function serverOpening(ServerOpeningEvent $event): void {}
public function topologyChanged(TopologyChangedEvent $event): void {}
public function topologyClosed(TopologyClosedEvent $event): void {}
public function topologyOpening(TopologyOpeningEvent $event): void {}
public function serverHeartbeatFailed(ServerHeartbeatFailedEvent $event): void {}
public function serverHeartbeatStarted(ServerHeartbeatStartedEvent $event): void {}
public function serverHeartbeatSucceeded(ServerHeartbeatSucceededEvent $event): void {}
}
MongoDB\Driver\Monitoring\addSubscriber(new MyServerMonitor());
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
// Beliebige Operation auslösen, damit der Treiber den Server erkennt
$manager->executeCommand('admin', new MongoDB\Driver\Command(['ping' => 1]));
// Wichtig · Fallstricke
Schreibschutz: ServerDescription-Objekte sind vollständig immutable und können nicht manuell instanziiert werden. Sie repräsentieren immer einen einmaligen Snapshot.
Servertypen: Der von getType() zurückgegebene String ist einer der Werte aus MongoDB\Driver\ServerDescription::TYPE_*-Konstanten, z. B. TYPE_RS_PRIMARY, TYPE_STANDALONE, TYPE_MONGOS oder TYPE_UNKNOWN.
Latenzangabe: Die von getRoundTripTime() gelieferte Latenz kann null sein, wenn der Server noch nicht erfolgreich kontaktiert wurde (Typ TYPE_UNKNOWN).
Extension-Version: Die Klasse ist ab mongodb-Extension Version 1.8.0 verfügbar. Einige Methoden wie getTopologyVersion() erfordern MongoDB-Server 4.4 oder neuer.