我试图通过使用其编程API手动配置Hazelcast 2.5.1实例,但是我发现它在做类似的事情时具有不同的行为。
因此,我的第一种方法很简单,即:
String confString = "<hazelcast><network><port auto-increment=\"true\">10555</port><join><multicast enabled=\"false\" /><tcp-ip enabled=\"true\"><interface>127.0.0.1</interface></tcp-ip></join><ssl enabled=\"false\" /></network></hazelcast>";
Config config = new InMemoryXmlConfig(confString);
Hazelcast.newHazelcastInstance(config);
这将起作用,启动不同的实例将允许它们加入集群。出于可读性考虑,这是我在内存中构建的XML:
<hazelcast>
<network>
<port auto-increment="true">10555</port>
<join>
<multicast enabled="false" />
<tcp-ip enabled="true">
<interface>127.0.0.1</interface>
</tcp-ip>
</join>
<ssl enabled="false" />
</network>
</hazelcast>
启动此操作的不同实例将使它们加入群集,这是我想要的行为。
但是,当我尝试以编程方式执行此操作时,Hazelcast将不允许新实例加入,并且会抱怨以下错误:
Jul 09, 2015 9:39:33 AM com.hazelcast.impl.Node
WARNING: [127.0.0.1]:10556 [dev] Config seed port is 10555 and cluster size is 1. Some of the ports seem occupied!
这是应该以编程方式执行相同操作的代码:
Config config = new Config();
config.setInstanceName("HazelcastService");
config.getNetworkConfig().setPortAutoIncrement(true);
config.getNetworkConfig().setPort(10555);
config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
config.getNetworkConfig().getJoin().getTcpIpConfig().setEnabled(true);
config.getNetworkConfig().getInterfaces().addInterface("127.0.0.1");
config.getNetworkConfig().getInterfaces().setEnabled(true);
SSLConfig sslConfig = new SSLConfig();
sslConfig.setEnabled(false);
config.getNetworkConfig().setSSLConfig(sslConfig);
Hazelcast.newHazelcastInstance(config);
我想念什么?
您在Java代码中添加的接口与您在xml中添加的接口不同。
这是您在Java代码中设置的-http: //docs.hazelcast.org/docs/2.5/manual/html-single/#ConfigSpecifyInterfaces
为了使配置生效,您应该添加此代码
config.getNetworkConfig().getJoin().getTcpIpConfig().addMember("127.0.0.1");
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句