简体   繁体   中英

Java code to handle node failure in jgroups cluster

My Jgroups config file contains the protocol/config

<FD timeout="3000" max_tries="3" />

But how do I use this in the Java code. For example, if there is a cluster and when I detect a failure I want to call an external notifier service via a REST call, like /nodeDown/nodeID I'm not able to find any java code which does this, all I see is message receive and send, is there a way I can implement this?

Thanks

Adding some more info I have done the step of writing a RecieverAdpater and override the start, stop, send, recieve method. Please find some code here,

public void receive(Message msg) {
    JGroupsDataPacket pckt = (JGroupsDataPacket) msg.getObject();
    if ( pckt.getCmd().equals("cacheUpdate") ){
        int uid = pckt.getAffectedUid();
        cacheUpdateRoutine(uid);
    }
    if ( pckt.getCmd().equals("ack") ){
        System.out.println("got the mesaage!");
    }       
    logger.log(LogLevel.ERROR, "received msg from " + msg.getSrc() + ": " + msg.getObject());
}

public void send(JGroupsDataPacket pckt){
    Message msg = new Message(null, null, pckt);
    msg.setFlag(Message.Flag.RSVP);

    try {
        channel.send(msg);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

I want to know where should I add code for example to handle the TimeOutException when I'm sending a message with the RSVP flag enabled. Another requirement is to know, which is the Java callback method which is called when SUSPECT(P) is triggered. I want to catch and handle the machine's going down, timout etc.

Is the viewAccepted() the only place where I can handle this? Is there a sample code around this? 

Also is http://www.jgroups.org/manual/html/user-channel.html the section 3. APIs give all java/programmatic things we can do with JGroups.

Thanks again

I found some documentation here, I think this is the class which I'm supposed to override

public interface MembershipListener {
    void viewAccepted(View new_view);
    void suspect(Object suspected_mbr);
    void block();
    void unblock();
}

OK, first off, you have a JChannel. You need to use it to register for view callbacks, like this:

   JChannel ch;
   ch.setReceiver(this);

' this ' extends ReceiverAdapter and overrides viewAccepted() :

   public void viewAccepted(View view) {
       // handle new view
   }

To determine the members which left between views v1 and v2:

   List<Address> left_mbrs=View.leftMembers(v1,v2);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM