Overview
Esta guía le muestra cómo usar el controlador de Scala para supervisar eventos de detección y monitorización de servidores (SDAM) en una instancia de MongoDB, un conjunto de réplicas o un clúster fragmentado. Estos eventos se producen cuando se produce algún cambio en el estado de la instancia o el clúster de MongoDB al que está conectado.
El controlador Scala define nueve eventos SDAM y proporciona las siguientes interfaces de escucha, que escuchan tres eventos SDAM cada una:
ClusterListener:Escucha eventos relacionados con cambios de topología o cambios en el estado y la estructura del clúster.ServerListener:Escucha eventos relacionados con cambios de servidores individualesServerMonitorListener:Escucha eventos relacionados con el latido o informa sobre el estado de la comunicación entre los miembros del conjunto de réplicas
Puede utilizar información sobre eventos SDAM en su aplicación para comprender los cambios del clúster, evaluar el estado del clúster o realizar una planificación de capacidad.
Suscríbete a Eventos
Puede acceder a detalles sobre los eventos SDAM suscribiéndose a ellos en su aplicación. Para suscribirse a un evento, cree una clase que implemente la interfaz ClusterListener, ServerListener o ServerMonitorListener. A continuación, agregue el receptor a su cliente configurando una instancia de MongoClientSettings y pasándola al constructor MongoClient.
El siguiente código crea la clase TestClusterListener, que implementa la interfaz ClusterListener. La clase contiene los siguientes métodos para gestionar eventos relacionados con la topología:
clusterOpening(): Imprime un mensaje cuando el controlador se conecta por primera vez a un clústerclusterClosed(): Imprime un mensaje cuando el controlador se desconecta de un clústerclusterDescriptionChanged(): Imprime un mensaje sobre los cambios en la disponibilidad de lectura y escritura del clúster
case class TestClusterListener(readPreference: ReadPreference) extends ClusterListener { var isWritable: Boolean = false var isReadable: Boolean = false override def clusterOpening(event: ClusterOpeningEvent): Unit = println(s"Cluster with ID ${event.getClusterId} opening") override def clusterClosed(event: ClusterClosedEvent): Unit = println(s"Cluster with ID ${event.getClusterId} closed") override def clusterDescriptionChanged(event: ClusterDescriptionChangedEvent): Unit = { if (!isWritable) { if (event.getNewDescription.hasWritableServer) { isWritable = true println("Writable server available") } } else { if (!event.getNewDescription.hasWritableServer) { isWritable = false println("No writable server available") } } if (!isReadable) { if (event.getNewDescription.hasReadableServer(readPreference)) { isReadable = true println("Readable server available") } } else { if (!event.getNewDescription.hasReadableServer(readPreference)) { isReadable = false println("No readable server available") } } } }
Luego, suscríbete a la clase TestClusterListener configurando los ajustes para tu instancia MongoClient, como se muestra en el siguiente código:
val uri: ConnectionString = ConnectionString("<connection string>") val settings: MongoClientSettings = MongoClientSettings .builder() .applyToClusterSettings((builder: ClusterSettings.Builder) => builder.addClusterListener(TestClusterListener(ReadPreference.secondary()))) .applyConnectionString(uri) .build() val client: MongoClient = MongoClient(settings)
Cuando ejecuta la aplicación, su suscriptor registra el evento SDAM y genera mensajes como el siguiente:
Cluster with ID ClusterId{value='...', description='...'} opening Writable server available Readable server available Cluster with ID ClusterId{value='...', description='...'} closed
Descripciones de eventos
Se puede suscribirse a los eventos SDAM definiendo una clase que implemente la interfaz de escucha correspondiente al evento e incluya un método para procesar el evento. La siguiente tabla proporciona el nombre de cada evento SDAM, la interfaz de escucha que gestiona el evento y una descripción de cuándo se publica el evento:
Tipo de evento | Interfaz de oyente | Descripción |
|---|---|---|
Se crea cuando cambia la descripción de la topología, como cuando hay una elección de un nuevo primario. | ||
Se crea cuando el controlador se conecta por primera vez al clúster. | ||
Se crea cuando el controlador se desconecta del clúster. | ||
Se crea cuando cambia la descripción del servidor. | ||
Se crea cuando se agrega un nuevo servidor a la topología. | ||
Se crea cuando se elimina un servidor existente de la topología. | ||
Se crea cuando el monitor del servidor envía un comando | ||
Se crea cuando el latido tiene éxito. | ||
Se crea cuando falla el latido del corazón. |
Para ver una lista completa de clases de monitoreo de eventos, consulte el paquete de eventos en la documentación de la API de Java.
Documentación de la API
Para obtener más información sobre cualquiera de los métodos analizados en esta guía, consulte la siguiente documentación de API: