Java-код для обработки сбоя узла в кластере jgroups
Мой конфигурационный файл Jgroups содержит протокол /config
<FD timeout="3000" max_tries="3" />
Но как мне использовать это в коде Java. Например, если есть кластер, и когда я обнаруживаю сбой, я хочу вызвать внешнюю службу уведомлений через вызов REST, like /nodeDown/nodeID
Я не могу найти какой-либо Java-код, который делает это, все, что я вижу, это получение и отправка сообщений, есть ли способ, которым я могу это реализовать?
Спасибо
Добавив еще немного информации, я сделал шаг написания RecieverAdpater и переопределил метод start, stop, send, recieve. Пожалуйста, найдите код здесь,
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 add code for example to handle the TimeOutException when I'm sending a message with the RSVP flag enabled.
Еще одно требование - это знать, which is the Java callback method which is called when SUSPECT(P) is triggered.
Я хочу поймать и справиться с поломкой машины, тайм-аутом и т. Д.
Is the viewAccepted() the only place where I can handle this? Is there a sample code around this?
Также http://www.jgroups.org/manual/html/user-channel.html раздел 3. API предоставляют все java/ программные вещи, которые мы можем сделать с JGroups.
еще раз спасибо
Я нашел некоторую документацию здесь, я думаю, что это класс, который я должен переопределить
public interface MembershipListener {
void viewAccepted(View new_view);
void suspect(Object suspected_mbr);
void block();
void unblock();
}
1 ответ
Хорошо, во-первых, у вас есть JChannel. Вы должны использовать его, чтобы зарегистрироваться для просмотра обратных вызовов, например так:
JChannel ch;
ch.setReceiver(this);
'this
расширяет ReceiverAdapter
и переопределяет viewAccepted()
:
public void viewAccepted(View view) {
// handle new view
}
Чтобы определить элементы, которые остались между представлениями v1 и v2:
List<Address> left_mbrs=View.leftMembers(v1,v2);