Кластер участников JGroups на одном хосте использует только один адрес

Я хочу разработать какое-то распределенное приложение с использованием JGroups. Но, к сожалению, я не могу получить более одного члена в кластере. Они всегда присоединяются к одному и тому же адресу:

    this.channel = new JChannel("udp.xml");
    channel.connect("test-cluster");
    this.rpcDispatcher = new RpcDispatcher(channel, null, null, this);
    this.myAddress = channel.getAddress();

    System.out.println("joined cluster: " + channel.getView().size() + ", " + channel.getView());

Когда я запускаю два (или более) сеанса отладки, я всегда получаю кластер размером 1.

joined cluster: 1, [Jimbo-3806|0] [Jimbo-3806]

И в результате этого вы не можете отправлять прямые сообщения с одного jvm на другой (поскольку вам нужно передать тот же адрес).

Я использую файл udp.xml по умолчанию в комплекте с JGroups.


person KIC    schedule 23.08.2015    source источник
comment
Я думаю, вам нужно вызвать connect(clusterName) в канале, чтобы присоединиться к кластеру.   -  person Ruben    schedule 23.08.2015
comment
@ Рубен, да, ты прав, на самом деле я так и делаю. Я только что скопировал два класса вместе для вопроса здесь и пропустил эту часть для копирования (изначально я передаю подключенный канал конструктору). Я отредактировал свой вопрос для этого.   -  person KIC    schedule 23.08.2015
comment
Я предлагаю вам просмотреть эту страницу, чтобы выяснить, связана ли проблема с вашим кодом или с вашей машиной: jgroups.org/manual/index.html#TestingTheSetup   -  person Ruben    schedule 23.08.2015
comment
Хм, демонстрация рисования работает правильно   -  person KIC    schedule 23.08.2015
comment
На самом деле мне пришлось использовать System.setProperty(java.net.preferIPv4Stack, true); перед новым JChannel(). По какой-то странной причине свойство в конфигурации запуска intellij не использовалось, и jvm застрял на IPv6.   -  person KIC    schedule 23.08.2015


Ответы (1)


В случае, если кто-то еще сталкивается с этой проблемой. Убедитесь, что демонстрационная версия работает правильно и ваша JVM использует IPv4 (это важно) . В моем случае JVM придерживалась IPv6, и мне пришлось заставить JVM использовать IPv4 следующим образом:

System.setProperty("java.net.preferIPv4Stack", "true");
Channel channel = new JChannel("udp.xml");
channel.connect("test-cluster");
person KIC    schedule 24.08.2015