Spring boot Spring Boot中的Hazelcast忽略我的网络配置

Spring boot Spring Boot中的Hazelcast忽略我的网络配置,spring-boot,apache-camel,hazelcast,Spring Boot,Apache Camel,Hazelcast,我使用Hazelcast作为我的主数据存储,由JPA支持到数据库。我试图让它不要在我们的开发环境中使用多播来查找其他实例,因为我们正在处理不同的类等,并指向我们自己的数据库,但Hazelcast仍在连接。我知道它在调用我的HazelcastConfiguration类,但它也在jar文件中使用hazelcast-defaults.xml并创建集群 @Bean(name = "hazelcastInstance") public HazelcastInstance getHazelcastInst

我使用Hazelcast作为我的主数据存储,由JPA支持到数据库。我试图让它不要在我们的开发环境中使用多播来查找其他实例,因为我们正在处理不同的类等,并指向我们自己的数据库,但Hazelcast仍在连接。我知道它在调用我的HazelcastConfiguration类,但它也在jar文件中使用hazelcast-defaults.xml并创建集群

@Bean(name = "hazelcastInstance")
public HazelcastInstance getHazelcastInstance(Config config) {
  return new HazelcastInstanceFactory(config).getHazelcastInstance();
}

@Bean(name = "hazelCastConfig")
public Config config ()
{
  MapConfig userMapConfig = buildUserMapConfig();
  ...
  Config config = new Config();
  config.setNetworkConfig(buildNetworkConfig());
  return config;
}

private NetworkConfig buildNetworkConfig () {
  NetworkConfig networkConfig = new NetworkConfig();
  JoinConfig join = new JoinConfig();
  MulticastConfig multicastConfig = new MulticastConfig();
  multicastConfig.setEnabled(false);
  join.setMulticastConfig(multicastConfig);
  TcpIpConfig tcpIpConfig = new TcpIpConfig();
  tcpIpConfig.setEnabled(false);
  join.setTcpIpConfig(tcpIpConfig);
  networkConfig.setJoin(join);
  return networkConfig;
}
现在我可以看到正在调用这些实体,它必须使用我的配置,因为这些实体会被备份到我的数据库中,但我在启动时也会看到:

2017-06-20 14:41:24.311  INFO 3741 --- [           main] c.h.i.cluster.impl.MulticastJoiner       : [10.10.0.125]:5702 [dev] [3.8.1] Trying to join to discovered node: [10.10.0.127]:5702
2017-06-20 14:41:34.870  INFO 3741 --- [ached.thread-14] c.hazelcast.nio.tcp.InitConnectionTask   : [10.10.0.125]:5702 [dev] [3.8.1] Connecting to /10.10.0.127:5702, timeout: 0, bind-any: true
2017-06-20 14:41:34.972  INFO 3741 --- [ached.thread-14] c.h.nio.tcp.TcpIpConnectionManager       : [10.10.0.125]:5702 [dev] [3.8.1] Established socket connection between /10.10.0.125:54917 and /10.10.0.127:5702
2017-06-20 14:41:41.181  INFO 3741 --- [thread-Acceptor] c.h.nio.tcp.SocketAcceptorThread         : [10.10.0.125]:5702 [dev] [3.8.1] Accepting socket connection from /10.10.0.146:60449
2017-06-20 14:41:41.183  INFO 3741 --- [ached.thread-21] c.h.nio.tcp.TcpIpConnectionManager       : [10.10.0.125]:5702 [dev] [3.8.1] Established socket connection between /10.10.0.125:5702 and /10.10.0.146:60449
2017-06-20 14:41:41.185  INFO 3741 --- [ration.thread-0] com.hazelcast.system                     : [10.10.0.125]:5702 [dev] [3.8.1] Cluster version set to 3.8
2017-06-20 14:41:41.187  INFO 3741 --- [ration.thread-0] c.h.internal.cluster.ClusterService      : [10.10.0.125]:5702 [dev] [3.8.1] 

Members [3] {
    Member [10.10.0.127]:5702 - e02dd47f-7bac-42d6-abf9-eeb62bdb1884
    Member [10.10.0.146]:5702 - 9239d33e-3b60-4bf5-ad81-da14524197ca
    Member [10.10.0.125]:5702 - 847d0008-6540-438d-bea6-7d8b19b8141a this
}

有人有想法吗?

配置TCP IP群集的一个简单方法是使用hazelcast.xml配置文件

<hazelcast>
    ...
    <network>
        <port auto-increment="true">5701</port> // check if this is valid for the usecase
        <join>
            <multicast enabled="false">
             </multicast>
            <tcp-ip enabled="true">
                <hostname>machine1</hostname>
                <hostname>machine2</hostname>
                <hostname>machine3:5799</hostname>
                <interface>192.168.1.0-7</interface>   // set values as per your env  
                <interface>192.168.1.21</interface> 
            </tcp-ip>
        </join>
        ...
    </network>
    ...
</hazelcast>

我遇到的问题是ApacheCamel及其HazelCast组件。它不会自动拾取您的Hazelcast实例。当我像这样配置HazelcastComponent时,它开始使用正确的HazelcastInstance:

@Bean(name = "hazelcast")
HazelcastComponent hazelcastComponent() {
    HazelcastComponent hazelcastComponent = new HazelcastComponent();
    hazelcastComponent.setHazelcastInstance(hazelcastInstance);
    return hazelcastComponent;
}

在下一版本的camel(2.20.0)中不再需要此功能,请参见
@Bean(name = "hazelcast")
HazelcastComponent hazelcastComponent() {
    HazelcastComponent hazelcastComponent = new HazelcastComponent();
    hazelcastComponent.setHazelcastInstance(hazelcastInstance);
    return hazelcastComponent;
}