【问题标题】:How do you programmatically configure hazelcast for the multicast discovery mechanism?您如何以编程方式为多播发现机制配置 hazelcast?
【发布时间】:2013-12-04 21:07:15
【问题描述】:

您如何以编程方式为多播发现机制配置 hazelcast?


详情:

documentation 仅提供 TCP/IP 的示例并且已过时:它使用不再存在的 Config.setPort()。

我的配置看起来像这样,但是发现不起作用(即我得到了输出"Members: 1":

Config cfg = new Config();                  
NetworkConfig network = cfg.getNetworkConfig();
network.setPort(PORT_NUMBER);

JoinConfig join = network.getJoin();
join.getTcpIpConfig().setEnabled(false);
join.getAwsConfig().setEnabled(false);
join.getMulticastConfig().setEnabled(true);

join.getMulticastConfig().setMulticastGroup(MULTICAST_ADDRESS);
join.getMulticastConfig().setMulticastPort(PORT_NUMBER);
join.getMulticastConfig().setMulticastTimeoutSeconds(200);

HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
System.out.println("Members: "+hazelInst.getCluster().getMembers().size());

更新 1,考虑到 asimaslan 的回答

如果我搞砸了 MulticastTimeout,我会得到 "Members: 1"

2013 年 12 月 5 日晚上 8:50:42 com.hazelcast.nio.ReadHandler 警告: [192.168.0.9]:4446 [dev] hz._hzInstance_1_dev.IO.thread-in-0 关闭 套接字到端点地址[192.168.0.7]:4446, 原因:java.io.EOFException:远程套接字关闭! 2013 年 12 月 5 日 8:57:24 PM com.hazelcast.instance.Node 严重:[192.168.0.9]:4446 [dev] 可以 不加入集群,正在关闭! com.hazelcast.core.HazelcastException: 300 秒后加入失败!


更新 2,考虑到 pveentjer 关于使用 tcp/ip 的回答

如果我将配置更改为以下,我仍然只能获得 1 个成员:

Config cfg = new Config();                  
NetworkConfig network = cfg.getNetworkConfig();
network.setPort(PORT_NUMBER);

JoinConfig join = network.getJoin();

join.getMulticastConfig().setEnabled(false);
join.getTcpIpConfig().addMember("192.168.0.1").addMember("192.168.0.2").
addMember("192.168.0.3").addMember("192.168.0.4").
addMember("192.168.0.5").addMember("192.168.0.6").
addMember("192.168.0.7").addMember("192.168.0.8").
addMember("192.168.0.9").addMember("192.168.0.10").
addMember("192.168.0.11").setRequiredMember(null).setEnabled(true);

//this sets the allowed connections to the cluster? necessary for multicast, too?
network.getInterfaces().setEnabled(true).addInterface("192.168.0.*");

HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
System.out.println("debug: joined via "+join+" with "+hazelInst.getCluster()
.getMembers().size()+" members.");

更准确地说,这个运行会产生输出

调试:通过 JoinConfig{multicastConfig=MulticastConfig 加入 [启用=false,multicastGroup=224.2.2.3,multicastPort=54327, multicastTimeToLive=32,multicastTimeoutSeconds=2, trustedInterfaces=[]], tcpIpConfig=TcpIpConfig [启用=true, connectionTimeoutSeconds=5,成员=[192.168.0.1,192.168.0.2, 192.168.0.3、192.168.0.4、192.168.0.5、192.168.0.6、192.168.0.7、192.168.0.8、192.168.0.9、192.168.0.10、192.168.0.11]、需要配置=false] region='us-east-1',securityGroupName='null',tagKey='null', tagValue='null',hostHeader='ec2.amazonaws.com', connectionTimeoutSeconds=5}} 有 1 个成员。

我的非 hazelcast 实现正在使用 UDP 多播并且工作正常。那么防火墙真的是问题所在吗?


更新 3,考虑到 pveentjer 关于检查网络的回答

由于我没有 iptables 或安装 iperf 的权限,我使用com.hazelcast.examples.TestApp 来检查我的网络是否正常工作,如第 2 章“立即炫耀”一节中的Getting Started With Hazelcast 所述:

我在 192.168.0.1 上调用 java -cp hazelcast-3.1.2.jar com.hazelcast.examples.TestApp 并获取输出

...Dec 10, 2013 11:31:21 PM com.hazelcast.instance.DefaultAddressPicker
INFO: Prefer IPv4 stack is true.
Dec 10, 2013 11:31:21 PM com.hazelcast.instance.DefaultAddressPicker
INFO: Picked Address[192.168.0.1]:5701, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5701], bind any local is true
Dec 10, 2013 11:31:22 PM com.hazelcast.system
INFO: [192.168.0.1]:5701 [dev] Hazelcast Community Edition 3.1.2 (20131120) starting at Address[192.168.0.1]:5701
Dec 10, 2013 11:31:22 PM com.hazelcast.system
INFO: [192.168.0.1]:5701 [dev] Copyright (C) 2008-2013 Hazelcast.com
Dec 10, 2013 11:31:22 PM com.hazelcast.instance.Node
INFO: [192.168.0.1]:5701 [dev] Creating MulticastJoiner
Dec 10, 2013 11:31:22 PM com.hazelcast.core.LifecycleService
INFO: [192.168.0.1]:5701 [dev] Address[192.168.0.1]:5701 is STARTING
Dec 10, 2013 11:31:24 PM com.hazelcast.cluster.MulticastJoiner
INFO: [192.168.0.1]:5701 [dev] 

Members [1] {
    Member [192.168.0.1]:5701 this
}

Dec 10, 2013 11:31:24 PM com.hazelcast.core.LifecycleService
INFO: [192.168.0.1]:5701 [dev] Address[192.168.0.1]:5701 is STARTED

然后我在 192.168.0.2 上调用 java -cp hazelcast-3.1.2.jar com.hazelcast.examples.TestApp 并获取输出

...Dec 10, 2013 9:50:22 PM com.hazelcast.instance.DefaultAddressPicker
INFO: Prefer IPv4 stack is true.
Dec 10, 2013 9:50:22 PM com.hazelcast.instance.DefaultAddressPicker
INFO: Picked Address[192.168.0.2]:5701, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5701], bind any local is true
Dec 10, 2013 9:50:23 PM com.hazelcast.system
INFO: [192.168.0.2]:5701 [dev] Hazelcast Community Edition 3.1.2 (20131120) starting at Address[192.168.0.2]:5701
Dec 10, 2013 9:50:23 PM com.hazelcast.system
INFO: [192.168.0.2]:5701 [dev] Copyright (C) 2008-2013 Hazelcast.com
Dec 10, 2013 9:50:23 PM com.hazelcast.instance.Node
INFO: [192.168.0.2]:5701 [dev] Creating MulticastJoiner
Dec 10, 2013 9:50:23 PM com.hazelcast.core.LifecycleService
INFO: [192.168.0.2]:5701 [dev] Address[192.168.0.2]:5701 is STARTING
Dec 10, 2013 9:50:23 PM com.hazelcast.nio.SocketConnector
INFO: [192.168.0.2]:5701 [dev] Connecting to /192.168.0.1:5701, timeout: 0, bind-any: true
Dec 10, 2013 9:50:23 PM com.hazelcast.nio.TcpIpConnectionManager
INFO: [192.168.0.2]:5701 [dev] 38476 accepted socket connection from /192.168.0.1:5701
Dec 10, 2013 9:50:28 PM com.hazelcast.cluster.ClusterService
INFO: [192.168.0.2]:5701 [dev] 

Members [2] {
    Member [192.168.0.1]:5701
    Member [192.168.0.2]:5701 this
}

Dec 10, 2013 9:50:30 PM com.hazelcast.core.LifecycleService
INFO: [192.168.0.2]:5701 [dev] Address[192.168.0.2]:5701 is STARTED

所以多播发现通常在我的集群上运行,对吗? 5701也是发现的端口吗?最后一个输出中的38476 是ID 还是端口?

加入仍然不适用于我自己的编程配置代码:(


更新 4,考虑到 pveentjer 关于使用默认配置的回答

修改后的TestApp给出输出

joinConfig{multicastConfig=MulticastConfig [enabled=true, multicastGroup=224.2.2.3, 
multicastPort=54327, multicastTimeToLive=32, multicastTimeoutSeconds=2, 
trustedInterfaces=[]], tcpIpConfig=TcpIpConfig [enabled=false, 
connectionTimeoutSeconds=5, members=[], requiredMember=null], 
awsConfig=AwsConfig{enabled=false, region='us-east-1', securityGroupName='null', 
tagKey='null', tagValue='null', hostHeader='ec2.amazonaws.com', connectionTimeoutSeconds=5}}

并在几秒钟后检测到其他成员(如果所有实例同时启动,则在每个实例一次仅将自己列为成员之后),而

myProgram 给出输出

joined via JoinConfig{multicastConfig=MulticastConfig [enabled=true, multicastGroup=224.2.2.3, multicastPort=54327, multica\
stTimeToLive=32, multicastTimeoutSeconds=2, trustedInterfaces=[]], tcpIpConfig=TcpIpConfig [enabled=false, connectionTimeoutSecond\
s=5, members=[], requiredMember=null], awsConfig=AwsConfig{enabled=false, region='us-east-1', securityGroupName='null', tagKey='nu\
ll', tagValue='null', hostHeader='ec2.amazonaws.com', connectionTimeoutSeconds=5}} with 1 members.

并且在大约 1 分钟的运行时间内没有检测到成员(我大约每 5 秒计算一次成员)。

但是,如果至少一个 TestApp 实例在集群上同时运行,则会检测到所有 TestApp 实例和所有 myProgram 实例,并且我的程序可以正常工作。如果我启动 TestApp 一次,然后并行启动两次 myProgram,TestApp 会给出以下输出:

java -cp ~/CaseStudy/jtorx-1.10.0-beta8/lib/hazelcast-3.1.2.jar:. TestApp
Dec 12, 2013 12:02:15 PM com.hazelcast.instance.DefaultAddressPicker
INFO: Prefer IPv4 stack is true.
Dec 12, 2013 12:02:15 PM com.hazelcast.instance.DefaultAddressPicker
INFO: Picked Address[192.168.180.240]:5701, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5701], bind any local is true
Dec 12, 2013 12:02:15 PM com.hazelcast.system
INFO: [192.168.180.240]:5701 [dev] Hazelcast Community Edition 3.1.2 (20131120) starting at Address[192.168.180.240]:5701
Dec 12, 2013 12:02:15 PM com.hazelcast.system
INFO: [192.168.180.240]:5701 [dev] Copyright (C) 2008-2013 Hazelcast.com
Dec 12, 2013 12:02:15 PM com.hazelcast.instance.Node
INFO: [192.168.180.240]:5701 [dev] Creating MulticastJoiner
Dec 12, 2013 12:02:15 PM com.hazelcast.core.LifecycleService
INFO: [192.168.180.240]:5701 [dev] Address[192.168.180.240]:5701 is STARTING
Dec 12, 2013 12:02:21 PM com.hazelcast.cluster.MulticastJoiner
INFO: [192.168.180.240]:5701 [dev] 


Members [1] {
    Member [192.168.180.240]:5701 this
}

Dec 12, 2013 12:02:22 PM com.hazelcast.core.LifecycleService
INFO: [192.168.180.240]:5701 [dev] Address[192.168.180.240]:5701 is STARTED
Dec 12, 2013 12:02:22 PM com.hazelcast.management.ManagementCenterService
INFO: [192.168.180.240]:5701 [dev] Hazelcast will connect to Management Center on address: http://localhost:8080/mancenter-3.1.2/
Join: JoinConfig{multicastConfig=MulticastConfig [enabled=true, multicastGroup=224.2.2.3, multicastPort=54327, multicastTimeToLive=32, multicastTimeoutSeconds=2, trustedInterfaces=[]], tcpIpConfig=TcpIpConfig [enabled=false, connectionTimeoutSeconds=5, members=[], requiredMember=null], awsConfig=AwsConfig{enabled=false, region='us-east-1', securityGroupName='null', tagKey='null', tagValue='null', hostHeader='ec2.amazonaws.com', connectionTimeoutSeconds=5}}
Dec 12, 2013 12:02:22 PM com.hazelcast.partition.PartitionService
INFO: [192.168.180.240]:5701 [dev] Initializing cluster partition table first arrangement...
hazelcast[default] > Dec 12, 2013 12:03:27 PM com.hazelcast.nio.SocketAcceptor
INFO: [192.168.180.240]:5701 [dev] Accepting socket connection from /192.168.0.8:38764
Dec 12, 2013 12:03:27 PM com.hazelcast.nio.TcpIpConnectionManager
INFO: [192.168.180.240]:5701 [dev] 5701 accepted socket connection from /192.168.0.8:38764
Dec 12, 2013 12:03:27 PM com.hazelcast.nio.SocketAcceptor
INFO: [192.168.180.240]:5701 [dev] Accepting socket connection from /192.168.0.7:54436
Dec 12, 2013 12:03:27 PM com.hazelcast.nio.TcpIpConnectionManager
INFO: [192.168.180.240]:5701 [dev] 5701 accepted socket connection from /192.168.0.7:54436
Dec 12, 2013 12:03:32 PM com.hazelcast.partition.PartitionService
INFO: [192.168.180.240]:5701 [dev] Re-partitioning cluster data... Migration queue size: 181
Dec 12, 2013 12:03:32 PM com.hazelcast.cluster.ClusterService
INFO: [192.168.180.240]:5701 [dev] 

Members [3] {
    Member [192.168.180.240]:5701 this
    Member [192.168.0.8]:5701
    Member [192.168.0.7]:5701
}

Dec 12, 2013 12:03:43 PM com.hazelcast.partition.PartitionService
INFO: [192.168.180.240]:5701 [dev] Re-partitioning cluster data... Migration queue size: 181
Dec 12, 2013 12:03:45 PM com.hazelcast.partition.PartitionService
INFO: [192.168.180.240]:5701 [dev] All migration tasks has been completed, queues are empty.
Dec 12, 2013 12:03:46 PM com.hazelcast.nio.TcpIpConnection
INFO: [192.168.180.240]:5701 [dev] Connection [Address[192.168.0.8]:5701] lost. Reason: Socket explicitly closed
Dec 12, 2013 12:03:46 PM com.hazelcast.cluster.ClusterService
INFO: [192.168.180.240]:5701 [dev] Removing Member [192.168.0.8]:5701
Dec 12, 2013 12:03:46 PM com.hazelcast.cluster.ClusterService
INFO: [192.168.180.240]:5701 [dev] 

Members [2] {
    Member [192.168.180.240]:5701 this
    Member [192.168.0.7]:5701
}

Dec 12, 2013 12:03:48 PM com.hazelcast.partition.PartitionService
INFO: [192.168.180.240]:5701 [dev] Partition balance is ok, no need to re-partition cluster data... 
Dec 12, 2013 12:03:48 PM com.hazelcast.nio.TcpIpConnection
INFO: [192.168.180.240]:5701 [dev] Connection [Address[192.168.0.7]:5701] lost. Reason: Socket explicitly closed
Dec 12, 2013 12:03:48 PM com.hazelcast.cluster.ClusterService
INFO: [192.168.180.240]:5701 [dev] Removing Member [192.168.0.7]:5701
Dec 12, 2013 12:03:48 PM com.hazelcast.cluster.ClusterService
INFO: [192.168.180.240]:5701 [dev] 

Members [1] {
    Member [192.168.180.240]:5701 this
}

Dec 12, 2013 12:03:48 PM com.hazelcast.partition.PartitionService
INFO: [192.168.180.240]:5701 [dev] Partition balance is ok, no need to re-partition cluster data... 

我在 TestApp 的配置中看到的唯一区别是

config.getManagementCenterConfig().setEnabled(true);
        config.getManagementCenterConfig().setUrl("http://localhost:8080/mancenter-"+version);

for(int k=1;k<= LOAD_EXECUTORS_COUNT;k++){
    config.addExecutorConfig(new ExecutorConfig("e"+k).setPoolSize(k));
}

所以我也拼命尝试将它添加到 myProgram 中。但它并没有解决问题 - 每个实例在整个运行过程中仍然只将自己检测为成员。


关于 myProgram 运行时间的更新

可能是程序运行的时间不够长(正如 pveentjer 所说)?

我的实验似乎证实了这一点: 如果Hazelcast.newHazelcastInstance(cfg); 和初始化cleanUp() 之间的时间t(即不再通过 hazelcast 通信并且不再检查成员数量)是

  • 不到30秒,没有和members: 1通信
  • 超过 30 秒:找到所有成员并进行通信(奇怪的是,这似乎发生的时间比 t - 30 秒长得多)。

30 秒是 hazelcast 集群需要的现实时间跨度,还是发生了什么奇怪的事情?这是来自 4 个同时运行的 myPrograms 的日志(寻找 hazelcast-members 重叠 30 秒,例如实例 1 和实例 3):

instance 1: 2013-12-19T12:39:16.553+0100 LOG 0 (START) engine started 
looking for members between 2013-12-19T12:39:21.973+0100 and 2013-12-19T12:40:27.863+0100  
2013-12-19T12:40:28.205+0100 LOG 35 (Torx-Explorer) Model  SymToSim is about to\  exit

instance 2: 2013-12-19T12:39:16.592+0100 LOG 0 (START) engine started 
looking for members between 2013-12-19T12:39:22.192+0100 and 2013-12-19T12:39:28.429+0100 
2013-12-19T12:39:28.711+0100 LOG 52 (Torx-Explorer) Model  SymToSim is about to\  exit

instance 3: 2013-12-19T12:39:16.593+0100 LOG 0 (START) engine started 
looking for members between 2013-12-19T12:39:22.145+0100 and 2013-12-19T12:39:52.425+0100  
2013-12-19T12:39:52.639+0100 LOG 54 (Torx-Explorer) Model  SymToSim is about to\  exit

INSTANCE 4: 2013-12-19T12:39:16.885+0100 LOG 0 (START) engine started 
looking for members between 2013-12-19T12:39:21.478+0100 and 2013-12-19T12:39:35.980+0100  
2013-12-19T12:39:36.024+0100 LOG 34 (Torx-Explorer) Model  SymToSim is about to\  exit

只有在 hazelcast 集群中存在足够多的成员后,如何才能最好地启动我的实际分布式算法?我可以以编程方式设置hazelcast.initial.min.cluster.size 吗? https://groups.google.com/forum/#!topic/hazelcast/sa-lmpEDa6A 听起来这会阻止 Hazelcast.newHazelcastInstance(cfg); 直到达到 initial.min.cluster.size。正确的?不同实例解除阻塞的同步程度(在哪个时间跨度内)?

【问题讨论】:

  • 您使用的是 hazelcast 2.5 或 3.X 还是...?
  • 我正在使用当前版本,3.1.2
  • 你能贴一段日志吗?
  • 我添加了单个 TestApp 实例与 myProgram 的两个实例同时运行时的完整输出。够了吗?
  • 您可以使用以下方式以编程方式设置“hazelcast.initial.min.cluster.size”:Config config = new Config(); config.setProperty("hazelcast.initial.min.cluster.size","3");等

标签: java configuration multicast hazelcast


【解决方案1】:

问题似乎是集群启动(和停止)并且没有等到集群中有足够的成员。您可以设置 hazelcast.initial.min.cluster.size 属性,以防止这种情况发生。

您可以使用以下方式以编程方式设置“hazelcast.initial.min.cluster.size”:

Config config = new Config(); 
config.setProperty("hazelcast.initial.min.cluster.size","3");

【讨论】:

  • (何时)Hazelcast 阻塞以防 initial.min.cluster.size 未达到?我使用值 2 并获得类似“调试:从 Hazelcluster 和 1 个成员启动 Hazel pullExternal”的输出。这是否肯定意味着有另一个成员离开了?
【解决方案2】:

您的配置是正确的,但是您已将多播超时设置为 200 秒,默认为 2 秒。设置一个较小的值会解决它。

来自 Hazelcast Java API 文档: MulticastConfig.html#setMulticastTimeoutSeconds(int)

指定节点在声明自己为主节点并创建自己的集群之前应等待来自网络中运行的另一个节点的有效多播响应的时间(以秒为单位)。这仅适用于尚未分配主节点的节点的启动。如果您指定一个高值,例如60 秒,这意味着在选择主节点之前,每个节点都将等待 60 秒才能继续,所以要小心提供高值。如果该值设置得太低,可能是节点放弃得太早,将创建自己的集群。

【讨论】:

  • 感谢您的回答 (+1)。我在我给出的代码之后添加了System.out.println("Members: "+hazelInst.getCluster().getMembers().size())。当我在可以处理多播的子网中的不同机器上启动多个实例时,每个实例都返回“成员:1”:(
【解决方案3】:

看来您正在使用 TCP/IP 集群,这很好。尝试以下(来自榛树书)

如果您使用 iptables,可以添加以下规则以允许来自端口 33000-31000 的出站流量:

iptables -A OUTPUT -p TCP --dport 33000:31000 -m state --state NEW -j ACCEPT

并控制从任何地址到端口 5701 的传入流量:

iptables -A INPUT -p tcp -d 0/0 -s 0/0 --dport 5701 -j ACCEPT

并允许传入的多播流量:

iptables -A INPUT -m pkttype --pkt-type multicast -j ACCEPT

连接测试 如果您因为机器无法加入集群而遇到问题,您可以检查两台机器之间的网络连接。为此,您可以使用名为 iperf 的工具。在一台机器上执行: iperf -s -p 5701 这意味着您正在侦听端口 5701。

在另一台机器上执行以下命令:

iperf -c 192.168.1.107 -d -p 5701

您将“192.168.1.107”替换为您的第一台机器的 IP 地址。如果你运行命令并得到如下输出:

------------------------------------------------------------
Server listening on TCP port 5701
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 192.168.1.107, TCP port 5701
TCP window size: 59.4 KByte (default)
------------------------------------------------------------
[  5] local 192.168.1.105 port 40524 connected with 192.168.1.107 port 5701
[  4] local 192.168.1.105 port 5701 connected with 192.168.1.107 port 33641
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.2 sec  55.8 MBytes  45.7 Mbits/sec
[  5]  0.0-10.3 sec  6.25 MBytes  5.07 Mbits/sec

您知道这两台机器可以相互连接。但是,如果您看到这样的内容:

Server listening on TCP port 5701
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
connect failed: No route to host

那你知道你手上可能有网络连接问题。

【讨论】:

  • 非常感谢,pveentjer。我在集群上试过这个,但没有这样做的权限。相反,我使用 com.hazelcast.examples.TestApp 来测试我的网络并更新了我的原始帖子(最后一部分)。
【解决方案4】:

看起来 Hazelcast 在 UDP 端口 54327(默认)上使用多播地址 224.2.2.3 进行发现,然后使用端口 5701 进行 TCP 通信。在防火墙中打开 UDP 端口 54327 为我修复了发现。 (我也打开了 TCP 端口 5701,但这还不够。)

【讨论】:

    【解决方案5】:

    您可以先尝试使用 tcp/ip 集群以确保其他一切正常吗?确认没有问题后,请尝试多播。顺便说一句,这也可能是防火墙问题。

    【讨论】:

    • 感谢您的建议 (+1)。我已经更新了我的原始帖子,添加了 TCPIP 加入,不幸的是这也不起作用。我从来没有在集群上遇到过防火墙问题。你还觉得是这个原因吗?或者您有任何进一步的想法可能是什么原因?
    • network.getInterfaces().setEnabled(true).addInterface("192.168.0.*"); 是做什么的?在某处有这方面的文档吗?
    • 你能发布一些日志吗?我真的想确保您使用的是 tcpip 而不是意外多播(如果您没有启用那个)。
    • 好主意,pveentjer。我又延长了我原来的帖子。希望输出足以向您展示我的错误。如果没有,请告诉我要记录的具体内容。
    【解决方案6】:

    因此,多播似乎正在您的网络上运行;这很好。

    您可以尝试以下设置:

    Config cfg = new Config();                  
    NetworkConfig network = cfg.getNetworkConfig();
    
    JoinConfig join = network.getJoin();
    join.getTcpIpConfig().setEnabled(false);
    join.getAwsConfig().setEnabled(false);
    join.getMulticastConfig().setEnabled(true);
    
    HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
    

    如您所见,我删除了所有自定义项。

    【讨论】:

    • 再次感谢 pveentjer (+1)。我已经扩展了我原来的帖子,并认为我们正在接近原因:)
    【解决方案7】:

    你能尝试像这样创建你的 Hazelcast 实例吗:

    Config cfg = new Config();                  
    HazelcastInstance hz = Hazelcast.newHazelcastInstance(cfg);
    

    管理中心的东西和执行器的创建不相关(我在 testapp 中添加了该代码,所以我 100% 确定这一点)。

    那么你的网络配置应该与 TestApp 完全相同。

    【讨论】:

    • 您的应用程序运行的时间够长,还是立即终止? testapp 一直在运行……所以这可能是问题的一部分??
    • Kick 会不会是程序运行时间不够长的原因?
    • 看起来很不错,谢谢。我再次扩展了我原来的帖子。
    • Hazelcast 不会在你的 main 方法完成后让你的集群保持活动状态。所以我想会发生什么是第一个应用程序启动,创建集群,他自己作为唯一成员,执行一些逻辑并关闭。然后第二个成员出现,做同样的事情......集群中只有一个成员,因为第一个成员已经关闭......并且他的主要方法完成并且他关闭了。 Hazelcast 不创建守护线程。所以 JVM 没有理由继续运行。我 99% 确定这就是原因。将 Thread.sleep(99999999) 添加到 main 的末尾,看看它是否有效。
    • 那是和testapp相比的区别; testapp 将阻止 jvm 终止,因为它正在等待命令行输入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 2017-08-19
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    相关资源
    最近更新 更多