Hazelcast:如果使用程序化配置,则无法加入群集

时间:2015-07-09 14:49:07

标签: java configuration hazelcast

我正在尝试通过使用他们的程序化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);

我错过了什么?

1 个答案:

答案 0 :(得分:1)

您在java代码中添加的接口与您在xml中添加的接口不同 这是您在java代码中设置的内容 - http://docs.hazelcast.org/docs/2.5/manual/html-single/#ConfigSpecifyInterfaces
为了使您的配置有效 - 您应该添加此

config.getNetworkConfig().getJoin().getTcpIpConfig().addMember("127.0.0.1");