2017-09-20 18 views
0

這是我的源代碼,我怎麼能打印的消息,如果一些成員被關閉出於某種原因?我想我可以某些事件或某種行動聽者卻怎麼...使用Hazelcast,如果成員關閉並打印消息,如何創建事件或捕獲?

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

查看https://stackoverflow.com/questions/46153963/hazelcast-notify-when-a-cluster-node-dies/46156011。一個'MembershipListener'就可以做到 –

+0

你能幫我實施嗎 –

+0

這裏有一個例子 - http://docs.hazelcast.org/docs/3.8.5/manual/html-single/index.html#listening-for-會員活動。創建一個實現'MembershipListener'的新類,並註冊它,以便Hazelcast知道發送它的類型的事件 - 在你的代碼中,像'memberOne.getCluster()。addMembershipListener(new ShutDownMembershipListener());' –

回答

1

試試這個,它增加了幾行到你的代碼和一個新的類

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()); 
    } 
} 
} 

System.setProperty("hazelcast.logging.type", "none")只是進行測試,以使其更簡單,看看發生了什麼。

+0

非常感謝!有用! –

相關問題