2016-05-20 9 views
0

同じクラスタ内に複数の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つのチャンネルのミックスがあるようです。ログにメッセージが落とされたという警告がたくさんあります。

このチャンネルのコンセプトで間違っていることは何ですか?

答えて

1

チャネルはクラスタ内のエンドポイントです。異なるクラスタを使用する異なるアプリケーションを使用している場合は、クラスタを分割する必要があります。そうしないと、アプリケーションは互いのメッセージを受け取ります。

これを行うには、さまざまなクラスタに対して異なるポート(external_portbind_port)を選択します。

+0

つまり、クラウドサービス(OpenShift)によって指定された1つのポートしかクラスタリング用に予約されていない場合、1つのチャネルしか使用できません。 – badera

+0

OpenShiftの仕組みがわかりません。単一のポートしか提供しない場合、複数のチャネルを作成することはできません。しかし、ある範囲のバインドアドレスを提供する場合は、同じバインドアドレス以外の異なるバインドアドレスにバインドできます。私はOpenShiftクラスタリングの人に尋ねることをお勧めします... –

0

これは、我々はOpenShiftにWF/EAPを使用し、 "ピング" のメカニズムです:設定および使用が容易であるべき

注:KubernetesのREST APIにアクセスするには、ポッドが実行されているサービスアカウントに許可を与える必要があります。

+0

我々はまだOpenShift 2を使用しています... – badera

関連する問題