Monitoramento de clusters
Visão geral
Este guia mostra como usar o driver Scala para monitorar eventos de descoberta e monitoramento do servidor (SDAM) em uma instância do MongoDB , conjunto de réplicas ou cluster fragmentado. Esses eventos ocorrem quando há alguma alteração no estado da instância ou cluster MongoDB ao qual você está conectado.
O driver Scala define nove eventos SDAM e fornece as seguintes interfaces de ouvinte, que escutam três eventos SDAM cada:
ClusterListener
: Ouve eventos relacionados a alterações de topologia ou alterações no estado e na estrutura do clusterServerListener
: escuta eventos relacionados a alterações individuais do servidorServerMonitorListener
: escuta eventos relacionados à pulsação ou relata o status da comunicação entre os membros do conjunto de réplicas
Você pode usar informações sobre eventos SDAM em seu aplicação para entender as alterações do cluster, avaliar a integridade do cluster ou executar o planejamento da capacidade.
Inscrever-se para receber eventos
Você pode acessar detalhes sobre eventos SDAM assinando-os em seu aplicação. Para assinar um evento, crie uma classe que implemente a interface ClusterListener
, ServerListener
ou ServerMonitorListener
. Em seguida, adicione o ouvinte ao seu cliente configurando uma instância de MongoClientSettings
e passando-a para o construtor MongoClient
.
O seguinte código cria a classe TestClusterListener
, que implementa a interface ClusterListener
. A classe contém os seguintes métodos para lidar com eventos relacionados à topologia:
clusterOpening()
: Imprime uma mensagem quando o driver se conecta pela primeira vez a um clusterclusterClosed()
: Imprime uma mensagem quando o driver se desconecta de um clusterclusterDescriptionChanged()
: Imprime uma mensagem sobre as alterações na disponibilidade de leitura e gravação do cluster
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") } } } }
Em seguida, inscreva-se na classe TestClusterListener
definindo as configurações de sua instância MongoClient
, conforme mostrado no código a seguir:
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)
Quando você executa o aplicação, seu assinante registra o evento SDAM e gera mensagens como as seguintes:
Cluster with ID ClusterId{value='...', description='...'} opening Writable server available Readable server available Cluster with ID ClusterId{value='...', description='...'} closed
Descrições de evento
Você pode assinar eventos SDAM definindo uma classe que implementa a interface de ouvinte correspondente do evento e inclui um método para processar o evento. A tabela a seguir fornece o nome de cada evento SDAM , a interface de ouvinte que lida com o evento, e uma descrição de quando o evento é publicado:
eventType | Interface do ouvinte | Descrição |
---|---|---|
Criado quando a descrição da topologia muda, como quando há uma eleição de uma nova primária. | ||
Criado quando o driver se conecta pela primeira vez ao cluster. | ||
Criado quando o driver se desconecta do cluster. | ||
Criado quando a descrição do servidor muda. | ||
Criado quando um novo servidor é adicionado à topologia. | ||
Criado quando um servidor existente é removido da topologia. | ||
Criado quando o monitor do servidor envia um comando | ||
Criado quando a pulsação é bem-sucedida. | ||
Criado quando o heartbeat falha. |
Para ver uma lista completa de classes de monitoramento de evento , consulte o pacote de evento na documentação da API Java .
Documentação da API
Para saber mais sobre qualquer um dos métodos discutidos nesta guia, consulte a seguinte documentação da API: