Documentation for a newer release is available. View Latest

Configurar Cluster Bootstrap con descubrimiento MongoDB

Esta guía te ayudará a usar MongoDB como mecanismo de descubrimiento para iniciar (bootstrap) un clúster de Akka.

Paso 0: Añadir dependencia

Debes añadir esto a pom.xml:

<dependency>
    <groupId>com.iconsolutions.ipf.core.discovery</groupId>
    <artifactId>akka-discovery-mongodb-plugin</artifactId>
</dependency>

Para encontrar la última versión, puedes usar esta consulta de Nexus: esta consulta de Nexus.

Paso 1: Habilitar Akka Cluster Bootstrap y usar MongoDB

Añade este fragmento a tu configuración (application.conf):

akka {
  extensions = ["akka.management.cluster.bootstrap.ClusterBootstrap"]
  discovery {
    method = akka-mongodb
    akka-mongodb.uri = ${ipf.mongodb.url} # o usa un URI real de MongoDB si no lo usas con IPF
  }
  management.cluster.bootstrap {
    contact-point.filter-on-fallback-port=false
  }
}

Paso 2: Verificar

Al iniciar tu aplicación, deberías comprobar que se crean los índices y que el servicio se registra a sí mismo.

Busca estas líneas en el log:

[INFO] [04/26/2023 20:43:55.668] Ensured indexes on Akka Discovery MongoDB ([akka-discovery-mongodb-1])
[INFO] [04/26/2023 20:43:55.663] Registered self with service name 8cc4d63b-09c8-4fca-9668-b11e6d00e75a and host:port 127.0.1.1:8558: AcknowledgedUpdateResult{matchedCount=0, modifiedCount=0, upsertedId=BsonObjectId{value=64497efb0b510545dbb89377}}

Ten en cuenta que ambas funcionalidades se pueden desactivar. Consulta más abajo.

Ahora también deberías poder navegar al servicio HTTP de Akka Management (por defecto 127.0.1.1:8558) y observar que todos los nodos del mismo tipo y que usan el mismo método de descubrimiento están en un clúster juntos.

Apéndice A: Configuración por defecto

La tabla siguiente describe la configuración por defecto que se distribuye con la librería:

Clave de configuración Descripción Valor por defecto

akka.discovery.akka-mongodb.enabled

¿Se permite a los nodos de Akka formar clúster?

true

akka.discovery.akka-mongodb.uri

El URI de MongoDB que se usará para conectar a la base de datos.

Establece el valor de este campo si no usas el plugin dentro de IPF o si no pretendes usar la misma base de datos que IPF.

Respeta la propiedad global ipf.mongodb.url.

ipf.mongodb.url si se usa dentro de IPF, mongodb://localhost:27017/ipf en caso contrario

akka.discovery.akka-mongodb.collection

El nombre de la colección donde guardar los datos de descubrimiento

akka-discovery-mongodb

akka.discovery.akka-mongodb.collection-settings

El nombre de la colección donde guardar la configuración de descubrimiento que puede cambiar dinámicamente

akka-discovery-mongodb-settings

akka.discovery.akka-mongodb.register-self

¿Debe este nodo registrarse a sí mismo en la base de datos?

true

akka.discovery.akka-mongodb.create-indexes

¿Debe akka-discovery-mongodb crear índices por sí mismo?

Desactívalo si el usuario de la base de datos no tiene concedida la acción createIndex.

Respeta el override global de IPF ipf.mongodb.create-indexes.

ipf.mongodb.create-indexes si está definido, true en caso contrario

akka.discovery.akka-mongodb.commit-quorum

El commit quorum que se usará al crear el índice para Akka Discovery MongoDB.

Respeta el override global de IPF ipf.mongodb.commit-quorum.

ipf.mongodb.commit-quorum si está definido, votingMembers en caso contrario

akka.discovery.akka-mongodb.updater.enabled

¿Debe ejecutarse el Updater?

true

akka.discovery.akka-mongodb.updater.initial-delay

Retardo inicial antes de que el Updater empiece a actualizar el valor lastUpdated de su entrada

30 seconds

akka.discovery.akka-mongodb.updater.initial-delay

Con qué frecuencia actualizar el valor lastUpdated

30 seconds

akka.discovery.akka-mongodb.updater.expire-entries-older-than

El valor expireAfter del índice TTL de MongoDB que se crea

30 minutes

akka.discovery.akka-mongodb.set-ssl-context

Si se debe habilitar el soporte SSL.

Ponerlo en true requerirá definir algunos de los ajustes ssl-context de abajo.

Respeta el override global ipf.mongodb.set-ssl-context.

ipf.mongodb.set-ssl-context si está definido

akka.discovery.akka-mongodb.ssl-context.key-store-type

Tipo del keystore.

Respeta el override global ipf.mongodb.ssl-context.key-store-type.

ipf.mongodb.ssl-context.key-store-type si está definido

akka.discovery.akka-mongodb.ssl-context.key-store-location

Ruta al keystore que contiene el certificado SSL (normalmente un fichero jks).

Respeta el override global ipf.mongodb.ssl-context.key-store-location.

ipf.mongodb.ssl-context.key-store-location si está definido

akka.discovery.akka-mongodb.ssl-context.key-store-password

Contraseña para acceder al keystore.

Respeta el override global ipf.mongodb.ssl-context.key-store-password.

ipf.mongodb.ssl-context.key-store-password si está definido

akka.discovery.akka-mongodb.ssl-context.key-password

Contraseña para acceder a la clave en el keystore.

Respeta el override global ipf.mongodb.ssl-context.key-password.

ipf.mongodb.ssl-context.key-password si está definido

akka.discovery.akka-mongodb.ssl-context.trust-store-type

Tipo del truststore.

Respeta el override global ipf.mongodb.ssl-context.trust-store-type.

ipf.mongodb.ssl-context.trust-store-type si está definido

akka.discovery.akka-mongodb.ssl-context.trust-store-location

Ruta al truststore que contiene el certificado SSL.

Respeta el override global ipf.mongodb.ssl-context.trust-store-location.

ipf.mongodb.ssl-context.trust-store-location si está definido

akka.discovery.akka-mongodb.ssl-context.trust-store-password

Contraseña para acceder al truststore.

Respeta el override global ipf.mongodb.ssl-context.trust-store-password.

ipf.mongodb.ssl-context.trust-store-password si está definido

Ten en cuenta que también hay configuración general de Akka Cluster Bootstrap que podrías querer ajustar. La documentación general de Akka Cluster Bootstrap se puede encontrar aquí: aquí.