2016-12-27 1 views
0

Existe-t-il un moyen d'exécuter un fragment de code sur un nœud hazelcast (version 3.4) après le démarrage d'un nœud? L'idée est la suivante: une fois que l'un des noeuds noisettes a commencé à créer une carte (sans attendre que .getMap soit exécuté du côté client) et popualte avec les données de la base de données, lorsque le client demande des données, la carte est déjà remplie.Créer et remplir une carte Hazelcast au démarrage d'un nœud

Répondre

0

Ceci peut être résolu en définissant un service personnalisé dans hazelcast.xml. Le constructeur de service est appelé sur les noeuds de démarrage et à partir de là, il est possible de demander et de remplir la carte de noisetier. Mais l'invocation de getMap doit être effectuée dans un nouveau thread

1

Oui. Vous devez implémenter le MapLoader pour votre IMap et ensuite utiliser la méthode MapLoader.loadAllKeys() pour initialiser la carte avec des raccourcis clavier.

C'est ce que dit la documentation:

Vous pouvez utiliser l'API MapLoader.loadAllKeys pour pré-remplir la carte en mémoire lorsque la carte est touché/utilisé. Si MapLoader.loadAllKeys renvoie NULL, rien ne sera chargé. Votre implémentation MapLoader.loadAllKeys peut renvoyer tout ou partie des clés . Par exemple, vous pouvez sélectionner et renvoyer uniquement les raccourcis clavier. MapLoader.loadAllKeys est le moyen le plus rapide de pré-remplir la carte puisque Hazelcast optimisera le processus de chargement en demandant à chaque nœud de charger sa partie possédée des entrées.

3.5 Map Persistence Documentation Link

+0

Le problème est que loadAllKeys est appelé lorsque getMap ("lorsque la carte est touchée/utilisée") est appelée. J'ai besoin d'un moyen d'invoquer ce droit juste après que le nœud soit regardé, afin de s'assurer qu'il se passe en dehors des heures de bureau. – ataurenis

+0

Je vous recommande d'inclure cette étape lors du démarrage du noeud dans votre script de démarrage de noeud. –