同じクラスタ内に複数のJChannels(名前が異なる)を簡単に作成できると考えました。私は次のセットアップを持っている:1つのクラスタ内の複数のJChannels
@Singleton
public class ChannelOne extends ReceiverAdapter
{
JChannel channel;
public void start()
{
channel = new JChannel();
channel.setReceiver(this);
channel.connect("ChannelOne");
}
public void receive(Message msg)
{
DataObject data = (DataObject) msg.getObject();
log.debug("JGroups: Message received event received: " + data.eventData);
}
public void send(DataObject data)
{
Message msg = new Message(null, null, data);
log.debug("JGroups: send: " + data.eventData);
channel.send(msg);
}
public void viewAccepted(View new_view)
{
log.debug("JGroups: View accepted: " + new_view);
}
}
そして、私のJGroups設定は、(それは私たちがUDPを使用することはできませんopenshift、上で使用されている - How to open a JChannel (JGroups) using Openshift Wildfly 8 Cartridgeを!)以下である
<config xmlns="urn:org:jgroups"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/JGroups-3.3.xsd">
<TCP
external_addr="${env.OPENSHIFT_GEAR_DNS}"
external_port="${env.OPENSHIFT_WILDFLY_CLUSTER_PROXY_PORT}"
bind_port="${env.OPENSHIFT_WILDFLY_CLUSTER_PORT}"
bind_addr="${env.OPENSHIFT_WILDFLY_IP}"
defer_client_bind_addr="true"
enable_diagnostics="false"/>
<TCPPING timeout="3000"
initial_hosts="${env.OPENSHIFT_WILDFLY_CLUSTER}"
port_range="0"
num_initial_members="1"/>
<MERGE2/>
<FD/>
<VERIFY_SUSPECT/>
<BARRIER/>
<pbcast.NAKACK2
use_mcast_xmit="false"/>
<UNICAST3/>
<pbcast.STABLE/>
<pbcast.GMS/>
<MFC/>
<FRAG2/>
</config>
は、今、私たちだけではなく、持っていると仮定しますChannelOneだけでなく、ChannelTwoシングルトンを使用してイベントを分離することを目標にしています。
私がそうした場合、メッセージがすべて正しく受信されていないことがわかります。 2つのチャンネルのミックスがあるようです。ログにメッセージが落とされたという警告がたくさんあります。
このチャンネルのコンセプトで間違っていることは何ですか?
つまり、クラウドサービス(OpenShift)によって指定された1つのポートしかクラスタリング用に予約されていない場合、1つのチャネルしか使用できません。 – badera
OpenShiftの仕組みがわかりません。単一のポートしか提供しない場合、複数のチャネルを作成することはできません。しかし、ある範囲のバインドアドレスを提供する場合は、同じバインドアドレス以外の異なるバインドアドレスにバインドできます。私はOpenShiftクラスタリングの人に尋ねることをお勧めします... –