#java #jgroups
Вопрос:
Запустил следующий пример программы, чтобы посмотреть, какие узлы рассматриваются как находящиеся в моем кластере.
import org.jgroups.JChannel;
import org.jgroups.Message;
import org.jgroups.ReceiverAdapter;
import org.jgroups.View;
import org.jgroups.util.Util;
import org.jgroups.*;
import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;
import java.util.Properties;
import java.util.Vector;
public class ClusterCheck extends ReceiverAdapter
{
JChannel channel;
JChannelFactory channelFactory;
String channelPropertiesPrimary;
String user_name=System.getProperty("user.name", "n/a");
final List<String> state=new LinkedList<String>();
private void start() throws Exception
{
Properties properties = new Properties();
FileInputStream fis = new FileInputStream( new File("myConfigfile.properties"));
properties.load( fis );
channelPropertiesPrimary = properties.getProperty( "udpinfo" );
channelFactory = new JChannelFactory();
channel = (JChannel) channelFactory.createChannel((Object)channelPropertiesPrimary);
channel.setOpt( Channel.VIEW, new Boolean( true ) );
channel.setOpt( Channel.LOCAL, new Boolean( false ) );
channel.setOpt( Channel.SUSPECT, new Boolean( true ) );
channel.setOpt( Channel.AUTO_RECONNECT, new Boolean( true ) );
channel.connect("myClusterName");
org.jgroups.View view = channel.getView();
if (view != null)
{
System.out.println("There are " view.getMembers().size() " members in this Cluster");
Vector viewMembers = view.getMembers();
for ( Iterator i = viewMembers.iterator(); i.hasNext(); )
{
System.out.println( ( i.next() ).toString() );
}
}
}
public static void main(String[] args) throws Exception {
new ClusterCheck().start();
}
public void viewAccepted(View view)
{
System.out.println("There are currently " view.getMembers().size() " members in this Cluster");
}
public void receive(Message msg)
{
// System.out.println(msg.getSrc() ": " msg.getObject());
}
}
Вот часть вывода, который я вижу :
:
:
INFO: handling view-change up: [myServer01-59496|0] [myServer01-59496]
There are 4
myServer01-21483
7203a079-b7bb-f565-22dd-a25aeeb3eda3
41323243-3452-abc3-569b-a5821cb4e433
myServer01-21483
:
:
Я понимаю, что случайные числа-это другие серверы, но почему в нем перечислены 4 сервера в группе, но дважды указан myServer01?
Ответ №1:
Другой процесс выполнялся с тем же именем группы на той же машине.
Я ожидал, что он вернет имя узла только один раз, независимо от того, сколько процессов выполняется с одним и тем же именем группы, но, похоже, JGroups находит имя узла для каждого процесса, прослушивающего в одной и той же группе, поэтому один и тот же узел может быть указан более одного раза.