2017-09-20 1 views
0

Ceci est ma source, comment puis-je imprimer un message si certains des membres est arrêté pour une raison quelconque? Je pense que je peux un événement ou d'une sorte d'auditeur d'action mais comment ...En utilisant Hazelcast, comment puis-je créer un événement ou attraper si le membre est arrêté et imprimer un message?

import com.hazelcast.core.*; 
import com.hazelcast.config.*; 

import java.util.Map; 


/** * * @author alvel */ public class ShutDown { 
    public static void main(String[] args) { 
     Config cfg = new Config(); 
     HazelcastInstance memberOne = Hazelcast.newHazelcastInstance(cfg); 
     HazelcastInstance memberTwo = Hazelcast.newHazelcastInstance(cfg); 
     Map<Integer, String> customerMap = memberOne.getMap("customers"); 
     customerMap.put(1, "google"); 
     customerMap.put(2, "apple"); 
     customerMap.put(3, "yahoo"); 
     customerMap.put(4, "microsoft"); 

     System.out.println("Hazelcast Nodes in this cluster"+Hazelcast.getAllHazelcastInstances().size()); 

     memberOne.shutdown(); 

     System.out.println("Hazelcast Nodes in this cluster After shutdown"+Hazelcast.getAllHazelcastInstances().size()); 

     Map<Integer, String> customerRestored = memberTwo.getMap("customers"); 
     for(String val:customerRestored.values()){ 
      System.out.println("-"+val); 
     } 

    } } 
+1

Voir https://stackoverflow.com/questions/46153963/hazelcast-notify-when-a-cluster-node-dies/46156011. Un 'MembershipListener' le fera –

+0

pouvez-vous m'aider avec la mise en œuvre –

+0

Il y a un exemple ici - http://docs.hazelcast.org/docs/3.8.5/manual/html-single/index.html#listening-for- événements-membres. Créez une nouvelle classe implémentant 'MembershipListener', et enregistrez-la afin que Hazelcast sache lui envoyer ce type d'événements - dans votre code, quelque chose comme' memberOne.getCluster(). AddMembershipListener (new ShutDownMembershipListener()); ' –

Répondre

1

Try this , il ajoute quelques lignes dans votre code et une nouvelle classe

public class ShutDown { 

static { 
    // ONLY TEMPORARY 
    System.setProperty("hazelcast.logging.type", "none"); 
} 

public static void main(String[] args) { 
    Config cfg = new Config(); 
    HazelcastInstance memberOne = Hazelcast.newHazelcastInstance(cfg); 
    //ADDED TO MEMBER ONE 
    memberOne.getCluster().addMembershipListener(new ShutDownMembershipListener()); 
    HazelcastInstance memberTwo = Hazelcast.newHazelcastInstance(cfg); 
    //ADDED TO MEMBER TWO 
    memberTwo.getCluster().addMembershipListener(new ShutDownMembershipListener()); 
    Map<Integer, String> customerMap = memberOne.getMap("customers"); 
    customerMap.put(1, "google"); 
    customerMap.put(2, "apple"); 
    customerMap.put(3, "yahoo"); 
    customerMap.put(4, "microsoft"); 

    System.out.println("Hazelcast Nodes in this cluster"+Hazelcast.getAllHazelcastInstances().size()); 

    memberOne.shutdown(); 

    System.out.println("Hazelcast Nodes in this cluster After shutdown"+Hazelcast.getAllHazelcastInstances().size()); 

    Map<Integer, String> customerRestored = memberTwo.getMap("customers"); 
    for(String val:customerRestored.values()){ 
     System.out.println("-"+val); 
    } 

} 

static class ShutDownMembershipListener implements MembershipListener { 

    @Override 
    public void memberAdded(MembershipEvent membershipEvent) { 
     System.out.println(this + membershipEvent.toString()); 
    } 

    @Override 
    public void memberAttributeChanged(MemberAttributeEvent arg0) { 
    } 

    @Override 
    public void memberRemoved(MembershipEvent membershipEvent) { 
     System.out.println(this + membershipEvent.toString()); 
    } 
} 
} 

La ligne System.setProperty("hazelcast.logging.type", "none") est juste pour les tests pour le rendre plus simple de voir ce qui se passe.

+0

Merci beaucoup! Ça marche! –