Overview
Esta guía te muestra cómo utilizar el driver de Scala para supervisar los eventos de descubrimiento y supervisión de servidores (SDAM) en una instancia de MongoDB, un set de réplicas o un clúster. Estos eventos se producen cuando hay cambios en el estado de la instancia o del clúster de MongoDB al que estás conectado.
El controlador de Scala define nueve eventos SDAM y proporciona las siguientes interfaces de oyente, que escuchan tres eventos SDAM cada una:
ClusterListener: Escucha eventos relacionados con cambios de topología, o cambios en el estado y estructura del clústerServerListenerEscucha eventos relacionados con cambios individuales en el servidorServerMonitorListener: Escucha eventos relacionados con el latido o informa sobre el estado de la comunicación entre los miembros del set de réplicas
Puede utilizar información sobre eventos de SDAM en su aplicación para comprender los cambios en el clúster, evaluar la salud del clúster o realizar una planificación de capacidades.
Suscribirse a eventos
Puedes acceder a los detalles sobre los eventos SDAM suscribiéndote a ellos en tu aplicación. Para suscribirse a un evento, cree una clase que implemente la interfaz ClusterListener, ServerListener o ServerMonitorListener. Luego, añade el listener a tu cliente configurando una instancia de MongoClientSettings y pasándola al constructor de 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 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 ejecutas la aplicación, tu suscriptor registra el evento SDAM y emite mensajes como los siguientes:
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 escucha | Descripción |
|---|---|---|
Se crea cuando la descripción de la topología cambia, como cuando se elige un nuevo primario. | ||
Se crea cuando el driver 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 añade un nuevo servidor a la topología. | ||
Se crea cuando un servidor existente se elimina de la topología. | ||
Se crea cuando el monitor del servidor envía un comando | ||
Se crea cuando el latido cardíaco tiene éxito. | ||
Se crea cuando falla la señal de vida. |
Para ver una lista completa de clases de supervisión de eventos, consulta el paquete evento 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 mencionados en esta guía, consulta la siguiente documentación de la API: