Java JGroups:send(null,null,Message)vs send(Address,null,Message)

Java JGroups:send(null,null,Message)vs send(Address,null,Message),java,jgroups,Java,Jgroups,我已经编写了使用jgroup的简单测试。 有两个类似的简单应用程序 import org.jgroups.*; import org.jgroups.conf.ConfiguratorFactory; import org.jgroups.conf.ProtocolConfiguration; import org.jgroups.conf.ProtocolStackConfigurator; import java.util.List; /** * @author Sergii.Zagr

我已经编写了使用jgroup的简单测试。 有两个类似的简单应用程序

import org.jgroups.*;
import org.jgroups.conf.ConfiguratorFactory;
import org.jgroups.conf.ProtocolConfiguration;
import org.jgroups.conf.ProtocolStackConfigurator;

import java.util.List;

/**
 * @author Sergii.Zagriichuk
 */
public class Test {
    public static void main(String[] args) throws Exception {
        JChannel ch = new JChannel();
        ch.setReceiver(new ReceiverAdapter() {
            public void receive(Message msg) {
                System.out.println("received message " + msg.getObject());
            }
        });
        ch.connect("one");
    }
}
还有这个

package com.datacradle.example;

import org.jgroups.Global;
import org.jgroups.JChannel;
import org.jgroups.Message;
import org.jgroups.conf.ConfiguratorFactory;
import org.jgroups.conf.ProtocolConfiguration;
import org.jgroups.conf.ProtocolStackConfigurator;
import org.jgroups.stack.IpAddress;
import org.jgroups.util.SingletonAddress;
import org.jgroups.util.Util;

import java.util.List;

/**
 * @author Sergii.Zagriichuk
 */
public class Test {

    void start(String props) throws Exception {

        JChannel chanel = new JChannel();
        String line = "Test message";
        chanel.connect("one");
//        Message msg = new Message(null, null, new TestData(line, 1111, line + " Test suffix"));
                Message msg = new Message(new IpAddress("fe33:0:0:0:1986:ba23:d939:f226%12",55435) , null, new TestData(line,1111,line+" sdfasdfasdfasdfasdfa"));
        chanel.send(msg);
    }

    public static void main(final String[] args) throws Exception {
        new Test().start(null);
    }
}
所以,如果我使用这种样式来创建消息

 Message msg = new Message(null, null, new TestData(line, 1111, line + " Test suffix"));
我只会收到一条消息(适用于当前组中的所有订户), 但是如果我用这种风格

Message msg = new Message(new IpAddress("fe33:0:0:0:1986:ba23:d939:f226%12",55435) , null, new TestData(line,1111,line+" sdfasdfasdfasdfasdfa"));
我会收到很多类似于循环的消息(这是一个dist地址) 问题是什么?或者我应该添加一些附加参数

p.S,JGroups 3.0.0 RC1


谢谢。

您不应该使用IpAddress类创建成员地址,因为这是不透明的。我建议从视图中获取目标地址,例如

List<Address> members=channel.getView().getMembers();
Address target=members.get(0);
Message msg=new Message(target, null, "hello");
channel.send(msg);
List members=channel.getView().getMembers();
地址目标=成员。获取(0);
Message msg=新消息(目标,空,“hello”);
频道发送(msg);

Hi但是通过这种方法,发送者如何知道自己的地址,因为其中的索引将是发送者的自地址。视图的第一个成员似乎是协调员。要更新此地址,发送者可以通过调用函数
channel.getAddress()来知道自己的地址
我们如何将消息发送到集群中的特定地址。例如:A、B、C、D是集群的成员,现在A想要向D发送消息。