Docs Menu
Docs Home
/ /
Referencia
/ / /

Supervisión JMX

El controlador utiliza JMXpara crear MXBeans que le permitan monitorear varios aspectos del controlador.

El conductor crea MXBean Instancias de un solo tipo, ConnectionPoolStatisticsMBean. El controlador registra una instancia ConnectionPoolStatisticsMBean por cada servidor al que se conecta. Por ejemplo, al conectarse a un conjunto de réplicas, el controlador crea una instancia por cada miembro no oculto del conjunto de réplicas.

Cada instancia MXBean debe registrarse con un nombre de objeto único, que consta de un dominio y un conjunto de propiedades con nombre. Todas las instancias MXBean creadas por el controlador se encuentran bajo el dominio org.mongodb.driver. Las instancias de ConnectionPoolStatisticsMBean tienen las siguientes propiedades:

  • clusterId: un identificador único generado por el cliente, necesario para garantizar la singularidad del nombre del objeto en situaciones donde una aplicación tiene múltiples instancias MongoClient conectadas a la misma implementación del servidor MongoDB

  • host: el nombre de host del servidor

  • port:el puerto en el que está escuchando el servidor

  • minSize: el tamaño mínimo permitido del grupo, incluidos los miembros inactivos y en uso

  • maxSize: el tamaño máximo permitido del grupo, incluidos los miembros inactivos y en uso

  • size: el tamaño actual del grupo, incluidos los miembros inactivos y en uso

  • checkedOutCount: el recuento actual de conexiones que están actualmente en uso

La monitorización del pool de conexiones JMX está deshabilitada de forma predeterminada. Para habilitarla, agregue una instancia com.mongodb.management.JMXConnectionPoolListener al crear una instancia MongoClientSettings:

MongoClientSettings settings =
MongoClientSettings.builder()
.applyToConnectionPoolSettings(builder -> builder.addConnectionPoolListener(new JMXConnectionPoolListener()))
.build();

El controlador implementa la especificación de monitoreo de comandos, lo que permite que una aplicación reciba una notificación cuando se inicia un comando y cuando tiene éxito o falla.

Una aplicación registra escuchas de comandos con un MongoClient configurando una instancia MongoClientSettings con instancias de clases que implementan la interfaz CommandListener. El siguiente ejemplo es una implementación simple de la interfaz CommandListener:

public class TestCommandListener implements CommandListener {
@Override
public void commandStarted(final CommandStartedEvent event) {
System.out.println(String.format("Sent command '%s:%s' with id %s to database '%s' "
+ "on connection '%s' to server '%s'",
event.getCommandName(),
event.getCommand().get(event.getCommandName()),
event.getRequestId(),
event.getDatabaseName(),
event.getConnectionDescription()
.getConnectionId(),
event.getConnectionDescription().getServerAddress()));
}
@Override
public void commandSucceeded(final CommandSucceededEvent event) {
System.out.println(String.format("Successfully executed command '%s' with id %s "
+ "on connection '%s' to server '%s'",
event.getCommandName(),
event.getRequestId(),
event.getConnectionDescription()
.getConnectionId(),
event.getConnectionDescription().getServerAddress()));
}
@Override
public void commandFailed(final CommandFailedEvent event) {
System.out.println(String.format("Failed execution of command '%s' with id %s "
+ "on connection '%s' to server '%s' with exception '%s'",
event.getCommandName(),
event.getRequestId(),
event.getConnectionDescription()
.getConnectionId(),
event.getConnectionDescription().getServerAddress(),
event.getThrowable()));
}
}

El siguiente ejemplo crea una instancia de MongoClientSettings configurada con una instancia de TestCommandListener:

MongoClientSettings settings = MongoClientSettings.builder()
.addCommandListener(new TestCommandListener())
.build();
MongoClient client = MongoClients.create(settings);

Un MongoClient configurado con estas opciones imprime un mensaje a System.out antes de enviar cada comando a un servidor MongoDB, e imprime otro mensaje cuando se completa con éxito o falla cada comando.

El controlador implementa la especificación de monitoreo SDAM, lo que permite notificar a una aplicación cuando el controlador detecta cambios en la topología del clúster MongoDB al que está conectado.

Una aplicación registra oyentes con un MongoClient configurando MongoClientSettings con instancias de clases que implementan cualquiera de las interfaces ClusterListener, ServerListener o ServerMonitorListener.

El siguiente código demuestra cómo crear un escucha de clúster:

public class TestClusterListener implements ClusterListener {
private final ReadPreference readPreference;
private boolean isWritable;
private boolean isReadable;
public TestClusterListener(final ReadPreference readPreference) {
this.readPreference = readPreference;
}
@Override
public void clusterOpening(final ClusterOpeningEvent clusterOpeningEvent) {
System.out.println(String.format("Cluster with unique client identifier %s opening",
clusterOpeningEvent.getClusterId()));
}
@Override
public void clusterClosed(final ClusterClosedEvent clusterClosedEvent) {
System.out.println(String.format("Cluster with unique client identifier %s closed",
clusterClosedEvent.getClusterId()));
}
@Override
public void clusterDescriptionChanged(final ClusterDescriptionChangedEvent event) {
if (!isWritable) {
if (event.getNewDescription().hasWritableServer()) {
isWritable = true;
System.out.println("Writable server available!");
}
} else {
if (!event.getNewDescription().hasWritableServer()) {
isWritable = false;
System.out.println("No writable server available!");
}
}
if (!isReadable) {
if (event.getNewDescription().hasReadableServer(readPreference)) {
isReadable = true;
System.out.println("Readable server available!");
}
} else {
if (!event.getNewDescription().hasReadableServer(readPreference)) {
isReadable = false;
System.out.println("No readable server available!");
}
}
}
}

El siguiente ejemplo crea una instancia de MongoClientSettings configurada con una instancia de TestClusterListener:

List<ServerAddress> seedList = ...
MongoClientSettings settings = MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.addClusterListener(new TestClusterListener(ReadPreference.secondary())))
.build();
MongoClient client = MongoClients.create(settings);

Un MongoClient configurado con estas opciones imprime un mensaje a System.out cuando se crea MongoClient con estas opciones y cuando se cierra MongoClient. Además, imprime un mensaje cuando el cliente entra en cualquiera de los siguientes estados:

  • Tiene un servidor disponible que aceptará escrituras

  • No hay un servidor disponible que acepte escrituras

  • Tiene un servidor disponible que aceptará lecturas mediante el uso del servidor configurado ReadPreference

  • No hay un servidor disponible que acepte lecturas mediante el uso configurado ReadPreference

El controlador admite la supervisión de eventos relacionados con el grupo de conexiones.

Una aplicación registra oyentes con un MongoClient configurando MongoClientSettings con instancias de clases que implementan la interfaz ConnectionPoolListener.

El siguiente código demuestra cómo crear un escucha de grupo de conexiones:

public class TestConnectionPoolListener implements ConnectionPoolListener {
@Override
public void connectionPoolOpened(final ConnectionPoolOpenedEvent event) {
System.out.println(event);
}
@Override
public void connectionPoolClosed(final ConnectionPoolClosedEvent event) {
System.out.println(event);
}
@Override
public void connectionCheckedOut(final ConnectionCheckedOutEvent event) {
System.out.println(event);
}
@Override
public void connectionCheckedIn(final ConnectionCheckedInEvent event) {
System.out.println(event);
}
@Override
public void connectionAdded(final ConnectionAddedEvent event) {
System.out.println(event);
}
@Override
public void connectionRemoved(final ConnectionRemovedEvent event) {
System.out.println(event);
}
}

El siguiente ejemplo crea una instancia de MongoClientSettings configurada con una instancia de TestConnectionPoolListener:

List<ServerAddress> seedList = ...
MongoClientSettings settings = MongoClientSettings.builder()
.applyToConnectionPoolSettings(builder ->
builder.addConnectionPoolListener(new TestConnectionPoolListener()))
.build();
MongoClient client = MongoClients.create(settings);

Un MongoClient configurado con estas opciones imprime un mensaje a System.out para cada evento relacionado con el grupo de conexiones para cada servidor MongoDB al que está conectado MongoClient.

Volver

Registro

En esta página