即使仍有一个成员节点

时间:2016-09-09 11:55:10

标签: cluster-computing hazelcast

我有2个成员节点和1个加入集群的客户端。

  1. 成员A在localhost 5701上启动

    Config config = new Config(); JoinConfig join = config.getNetworkConfig()。setPort(5701).getJoin(); join.getMulticastConfig()的setEnabled(假)。 join.getAwsConfig()的setEnabled(假)。 。join.getTcpIpConfig()使用addMember("本地主机:5701&#34)的setEnabled(真)。 。join.getTcpIpConfig()使用addMember("本地主机:5702&#34)的setEnabled(真)。 HazelcastInstance实例= Hazelcast.newHazelcastInstance(config);

  2. 会员B在localhost 5702上启动

    Config config = new Config(); JoinConfig join = config.getNetworkConfig()。setPort(5702).getJoin(); join.getMulticastConfig()的setEnabled(假)。 join.getAwsConfig()的setEnabled(假)。 。join.getTcpIpConfig()使用addMember("本地主机:5701&#34)的setEnabled(真)。 。join.getTcpIpConfig()使用addMember("本地主机:5702&#34)的setEnabled(真)。 HazelcastInstance实例= Hazelcast.newHazelcastInstance(config);

  3. 客户加入地址:

    config = new ClientConfig(); config.getNetworkConfig()。addAddress(" localhost:5701"," localhost:5702"); instance = HazelcastClient.newHazelcastClient(config);

  4. 客户端添加了一个监听器:

    instance.getLifecycleService()。addLifecycleListener(new LifecycleListener(){             @覆盖             public void stateChanged(LifecycleEvent event){                 System.out.println(" LIFECYCLE状态已更改:" +事件);             }         });

  5. 会员A被退回。

  6. 客户端收到断开连接事件:

    2016年9月9日下午12:52:19 com.hazelcast.client.connection.nio.ClientConnection 警告:hz.client_0 [dev] [3.7]连接[/127.0.0.1:5701]丢失。原因:java.io.IOException [现有连接被远程主机强行关闭] 2016年9月9日下午12:52:19 com.hazelcast.core.LifecycleService 信息:hz.client_0 [dev] [3.7] HazelcastClient 3.7(20160817 - 1302600)是CLIENT_DISCONNECTED LIFECYCLE状态已更改:LifecycleEvent [state = CLIENT_DISCONNECTED] 2016年9月9日下午12:52:19 com.hazelcast.client.spi.impl.ClientMembershipListener 信息:hz.client_0 [dev] [3.7]

    成员[2] {     会员[localhost]:5701 - dc7a127d-8302-42f6-9e3e-82406162e245     会员[localhost]:5702 - cb115830-bb71-4af2-a1c1-b11f39e351c8 }

    2016年9月9日下午12:52:19 com.hazelcast.core.LifecycleService 信息:hz.client_0 [dev] [3.7] HazelcastClient 3.7(20160817 - 1302600)是CLIENT_CONNECTED LIFECYCLE状态已更改:LifecycleEvent [state = CLIENT_CONNECTED] 2016年9月9日下午12:52:24 com.hazelcast.client.spi.impl.ClientMembershipListener 信息:hz.client_0 [dev] [3.7]

    成员[1] {     会员[localhost]:5702 - cb115830-bb71-4af2-a1c1-b11f39e351c8 }

  7. 7)现在,如果我再次退回会员A,则不会收到断开/连接事件。

    8)如果我反弹B会员,我会再次举办活动。

    我的问题是,即使在任何时候,至少有一名成员完全可用,为什么我会收到这些事件?我只希望这些事件只在整个集群关闭时(两个成员)。

1 个答案:

答案 0 :(得分:1)

您正在谈论CLIENT_CONNECTED和CLIENT_DISCONNECTED事件(LifecycleListener),对吧?

这些仅在断开连接到群集的连接时传递(即仅用于我们称为该客户端的所有者的连接)。您不会在重新连接到非所有者成员时收到事件。

客户端连接到5702,当5701回来时,它不会尝试连接到5701作为所有者,因为它已经拥有所有者连接。因此,在步骤7不会收到任何事件,这是预期的行为。