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 instanciasMongoClientconectadas a la misma implementación del servidor MongoDBhost: el nombre de host del servidorport:el puerto en el que está escuchando el servidorminSize: el tamaño mínimo permitido del grupo, incluidos los miembros inactivos y en usomaxSize: el tamaño máximo permitido del grupo, incluidos los miembros inactivos y en usosize: el tamaño actual del grupo, incluidos los miembros inactivos y en usocheckedOutCount: 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();
Monitoreo de comandos
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 { 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())); } 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())); } 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.
Monitoreo de clústeres
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; } public void clusterOpening(final ClusterOpeningEvent clusterOpeningEvent) { System.out.println(String.format("Cluster with unique client identifier %s opening", clusterOpeningEvent.getClusterId())); } public void clusterClosed(final ClusterClosedEvent clusterClosedEvent) { System.out.println(String.format("Cluster with unique client identifier %s closed", clusterClosedEvent.getClusterId())); } 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
ReadPreferenceNo hay un servidor disponible que acepte lecturas mediante el uso configurado
ReadPreference
Monitoreo del pool de conexiones
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 { public void connectionPoolOpened(final ConnectionPoolOpenedEvent event) { System.out.println(event); } public void connectionPoolClosed(final ConnectionPoolClosedEvent event) { System.out.println(event); } public void connectionCheckedOut(final ConnectionCheckedOutEvent event) { System.out.println(event); } public void connectionCheckedIn(final ConnectionCheckedInEvent event) { System.out.println(event); } public void connectionAdded(final ConnectionAddedEvent event) { System.out.println(event); } 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.