JGroups: отправить (ноль, ноль, сообщение) против отправки (адрес, ноль, сообщение) - PullRequest
3 голосов
/ 28 сентября 2011

Я написал простой тест для использования JGroups. Есть два простых приложения, как это

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

Спасибо.

1 Ответ

3 голосов
/ 29 сентября 2011

Вы должны , а не создать адрес члена с помощью класса IpAddress, поскольку это непрозрачно. Я предлагаю получить целевой адрес из представления, например

List<Address> members=channel.getView().getMembers();
Address target=members.get(0);
Message msg=new Message(target, null, "hello");
channel.send(msg);
...