2016-09-09 10 views
0

2つのメンバーノードと1つのクライアントがクラスタに参加しています。残りのメンバーノードがまだ残っていても、ヘーゼルキャストクライアント接続切断イベントが発生する

  1. メンバーAは、ローカルホスト上で5701

    コンフィグ設定=新しい設定を()が起動されます。 JoinConfig join = config.getNetworkConfig()。setPort(5701).getJoin(); join.getMulticastConfig()。setEnabled(false); join.getAwsConfig()。setEnabled(false);join.getTcpIpConfig()。addMember( "localhost:5701")。setEnabled(true);join.getTcpIpConfig()。addMember( "localhost:5702")。setEnabled(true); HazelcastInstanceインスタンス= Hazelcast.newHazelcastInstance(config);

  2. 会員Bは、ローカルホスト上で5702

    コンフィグ設定=新しい設定を()が起動されます。 JoinConfig join = config.getNetworkConfig()。setPort(5702).getJoin(); join.getMulticastConfig()。setEnabled(false); join.getAwsConfig()。setEnabled(false);join.getTcpIpConfig()。addMember( "localhost:5701")。setEnabled(true);join.getTcpIpConfig()。addMember( "localhost:5702")。setEnabled(true); HazelcastInstanceインスタンス= Hazelcast.newHazelcastInstance(config);

  3. クライアントがアドレスに加入:

    設定=新しいClientConfig(); config.getNetworkConfig()。addAddress( "localhost:5701"、 "localhost:5702"); インスタンス= HazelcastClient.newHazelcastClient(config);

  4. クライアントは、リスナーを追加します。

    instance.getLifecycleServiceのstateChanged()addLifecycleListener(新しいLifecycleListener(){@Override ます。public void(LifecycleEventイベント){System.out.printlnは (「ライフサイクル状態が変更します。 : "+イベント); } });

  5. メンバーAはバウンスされています。

    2016年9月9日12時52分19秒PM com.hazelcast.client.connection.nio.ClientConnection WARNING:hz.client_0 [DEV] [3.7]コネクション[

  6. クライアントが切断接続イベントを受け取ります/127.0.0.1:5701]が失われました。理由:java.io.IOException [既存の接続がリモートホストによって強制的に閉じられました] 20 9月20日12:52:19 PM com.hazelcast.core.LifecycleService INFO:hz.client_0 [dev] [3.7] HazelcastClient 3.7(20160817から1302600)は ライフサイクル状態が変化CLIENT_DISCONNECTEDれる:LifecycleEvent [状態= CLIENT_DISCONNECTED] 2016年9月9日12時52分19秒PMのcom.hazelcast.client.spi.impl.ClientMembershipListener INFO:hz.client_0 [DEV]を[3。7]

    人[2] { メンバー[ローカルホスト]:5701 - dc7a127d-8302-42f6-9e3e-82406162e245 メンバー[ローカルホスト]:5702 - cb115830-bb71-4af2-A1C1-b11f39e351c8 }

    com.hazelcast.core.LifecycleService HazelcastClient 3.7(20160817-1302600)はCLIENT_CONNECTEDです LIFECYCLE状態が変更されました:LifecycleEvent [state = CLIENT_CONNECTED] 2016年9月9日12:52:24 PM com.hazelcast.client.spi.impl.ClientMembershipListener INFO:hz.client_0 [dev] [3.7]

    メンバー[1] { 会員[ローカルホスト]:5702 - cb115830-bb71-4af2-A1C1-b11f39e351c8 }

7)今は再びメンバーAバウンス場合、NO切断/イベントに接続されていません受け取った。

8)メンバーBをバウンスすると、再びイベントが発生します。

私の質問は、常に少なくとも1人のメンバーが完全に利用可能であるにもかかわらず、これらのイベントを取得するのはなぜですか?私はこれらのイベントがクラスタ全体がダウンしている場合(両方のメンバー)にのみ期待します。

答えて

1

あなたはCLIENT_CONNECTEDイベントとCLIENT_DISCONNECTEDイベント(LifecycleListener)について話しています。

これらは、クラスタとの接続切断時(つまり、そのクライアントの所有者と呼ばれる接続の場合のみ)に配信されます。オーナー以外のメンバーとの再接続時にイベントを受け取ることはありません。

クライアントが5702に接続されていて、5701が戻ったときに、すでにオーナーに接続しているため、所有者として5701に接続しようとしません。したがって、ステップ7では、予想される動作であるイベントは受信されない。

+0

はい、これらのイベントは正確です。 "オーナー"の接続という概念は、クライアント接続が特定のメンバーに関連付けられるとは思わなかった。私が思った/期待したことは、クラスタが完全に停止するまで(すべてのメンバー)クライアントがイベントを見ないということでした。それ以外の場合は、クライアントが余分なイベントを見ていると思います。ライフサイクル処理コードをクライアントに入れると、これが不必要に呼び出されてしまいます。 – hklf

関連する問題