Saltar al contenido

Clustering y datos compartidos en Vert.x

Esta es la solución más correcta que encomtrarás aportar, pero primero mírala detenidamente y valora si se adapta a tu trabajo.

Solución:

Hay opciones para compartir datos entre instancias de vertx en diferentes máquinas

Opción 1.

Puede usar Vert.x ClusterManager y sus mapas:

ClusterManager clusterManager = ((VertxInternal)vertx).clusterManager();
Map map = clusterManager.getSyncMap("mapName"); // shared distributed map

Ese mapa está respaldado por un Hazelcast IMap y se distribuye. Esto supone que está ejecutando vertx con el -cluster parámetro y ha configurado la agrupación en clústeres.

Sin embargo tenga en cuenta que esto es API interna y generalmente no se recomienda para la producción. Si está haciendo un experimento de una sola vez, entonces podría ser útil.

Opcion 2.

Puede obtener acceso a Hazelcast una vez que vertx se inicia en modo agrupado:

Set instances = Hazelcast.getAllHazelcastInstances();
HazelcastInstance hz = instances.stream().findFirst().get();
Map map = hz.getMap("mapName"); // shared distributed map

Con Vert.x 3, si configura sus instancias de Vert.x en "modo agrupado" (que puede ser tan simple como agregar -cluster a la línea de comando del lanzador Vert.x, vea aquí para más detalles), luego puede usar el SharedData interfaz para obtener acceso a "mapas distribuidos" que permite a los miembros del clúster leer y escribir datos en todo el clúster de forma transparente.

Ejemplo:

if (vertx.isClustered()) 
    log.info("Using clustered data store");
    vertx.sharedData().getClusterWideMap("entities", 
            res -> 
                AsyncMap dataMap = res.result();
                setDataStore(dataMap);
            );

Afaik, no puede compartir datos entre diferentes instancias de vert.x, de la documentación

"[...] Tal caso de uso se resuelve mejor al proporcionar una estructura de mapa compartida a la que pueden acceder directamente diferentes instancias de verticle en la misma instancia de vert.x".

Dado que "instancia de vert.x" significa "instancia de jvm", no puede usar sharedmap/set entre diferentes jvm. Puede usar el bus de eventos para esto.

Editar antes de que otras personas voten negativamente: mi respuesta es de 2012, hace 6 años, cuando esto no era posible. Ahora es posible como ya dijeron otras personas

Puedes patrocinar nuestra misión fijando un comentario o valorándolo te estamos agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.