Ich dachte, dass es einfach möglich ist, mehrere JChannels (mit unterschiedlichen Namen) im selben Cluster zu haben. Ich muss folgende Konfiguration:Mehrere JChannels in einem Cluster
@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);
}
}
Und meine JGroups Konfiguration ist die folgende (auf Openshift verwendet wird, in denen wir nicht UDP verwenden können - 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>
Nehmen wir nun an, dass wir nicht nur eine ChannelOne aber auch eine ChannelTwo Singleton mit dem Ziel, Ereignisse durch ihre Verwendung zu trennen.
Wenn ich dies tue, beobachte ich, dass die Nachrichten nicht alle richtig empfangen werden. Es scheint eine Mischung zwischen den beiden Kanälen zu geben. Ich habe eine Menge Warnungen im Protokoll, dass Nachrichten gelöscht wurden.
Was verstehe ich falsch in diesem Konzept der Kanäle?
Das heißt, wenn nur ein Port für das Clustering reserviert ist, der vom Cloud-Dienst (OpenShift) bereitgestellt wird, ist nur ein Kanal möglich? – badera
Ich weiß nicht, wie OpenShift funktioniert. Wenn sie nur einen einzelnen Port bereitstellen, können Sie nicht mehrere Kanäle erstellen. Wenn sie jedoch eine Reihe von Bind-Adressen bereitstellen, können Sie eine Bindung an eine andere Bind-Adresse, aber denselben Port herstellen. Ich schlage vor, fragen Sie die OpenShift Clustering Jungs ... –