我有2个成员节点和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);
会员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);
客户加入地址:
config = new ClientConfig(); config.getNetworkConfig()。addAddress(" localhost:5701"," localhost:5702"); instance = HazelcastClient.newHazelcastClient(config);
客户端添加了一个监听器:
instance.getLifecycleService()。addLifecycleListener(new LifecycleListener(){ @覆盖 public void stateChanged(LifecycleEvent event){ System.out.println(" LIFECYCLE状态已更改:" +事件); } });
会员A被退回。
客户端收到断开连接事件:
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)现在,如果我再次退回会员A,则不会收到断开/连接事件。
8)如果我反弹B会员,我会再次举办活动。
我的问题是,即使在任何时候,至少有一名成员完全可用,为什么我会收到这些事件?我只希望这些事件只在整个集群关闭时(两个成员)。
答案 0 :(得分:1)
您正在谈论CLIENT_CONNECTED和CLIENT_DISCONNECTED事件(LifecycleListener),对吧?
这些仅在断开连接到群集的连接时传递(即仅用于我们称为该客户端的所有者的连接)。您不会在重新连接到非所有者成员时收到事件。
客户端连接到5702,当5701回来时,它不会尝试连接到5701作为所有者,因为它已经拥有所有者连接。因此,在步骤7不会收到任何事件,这是预期的行为。