同一台机器上有多个 Hazelcast 实例吗?

dt9*_*t94 1 hazelcast

我正在尝试为我的 Hazelcast 集群编写单元测试 - 根据此文档 https://hazelcast.zendesk.com/hc/en-us/articles/115004425243-How-do-I-test-my-Hazelcast-cluster-

我这样写了我的代码 -

public void test(){
    HazelcastInstance instance = Hazelcast.newHazelcastInstance(); 
    HazelcastInstance instance2 = Hazelcast.newHazelcastInstance();                
}
Run Code Online (Sandbox Code Playgroud)

我的控制台显示 -

Members [1] {
    Member [MY IP]:5701 -  this
}
Run Code Online (Sandbox Code Playgroud)

Members [1] {
    Member [MY IP]:5702 - this
}
Run Code Online (Sandbox Code Playgroud)

端口号改变,IP保持不变,但它们不在同一个集群中。我该怎么做才能让它们成为同一集群的一部分(在单个 JVM 上)?更新

更多控制台数据 -

Jul 31, 2018 3:21:00 PM com.hazelcast.config.XmlConfigLocator
INFO: Loading 'hazelcast-default.xml' from classpath.
Jul 31, 2018 3:21:01 PM com.hazelcast.instance.DefaultAddressPicker
INFO: [LOCAL] [dev] [3.7.4] Prefer IPv4 stack is true.
Jul 31, 2018 3:21:01 PM com.hazelcast.instance.DefaultAddressPicker
INFO: [LOCAL] [dev] [3.7.4] Picked [MY_IP]:5701, using socket     ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5701], bind any local is true
Jul 31, 2018 3:21:01 PM com.hazelcast.system
INFO: [MY_IP]:5701 [dev] [3.7.4] Hazelcast 3.7.4 (20161209 - 3df1bb5) starting at [MY_IP]:5701
Jul 31, 2018 3:21:01 PM com.hazelcast.system
INFO: [MY_IP]:5701 [dev] [3.7.4] Copyright (c) 2008-2016, Hazelcast, Inc. All Rights Reserved.
Jul 31, 2018 3:21:01 PM com.hazelcast.system
INFO: [MY_IP]:5701 [dev] [3.7.4] Configured Hazelcast Serialization version : 1
Jul 31, 2018 3:21:01 PM com.hazelcast.spi.impl.operationservice.impl.BackpressureRegulator
INFO: [MY_IP]:5701 [dev] [3.7.4] Backpressure is disabled
Jul 31, 2018 3:21:01 PM com.hazelcast.instance.Node
INFO: [MY_IP]:5701 [dev] [3.7.4] Creating MulticastJoiner
Jul 31, 2018 3:21:01 PM com.hazelcast.core.LifecycleService
INFO: [MY_IP]:5701 [dev] [3.7.4] [MY_IP]:5701 is STARTING
Jul 31, 2018 3:21:02 PM com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl
INFO: [MY_IP]:5701 [dev] [3.7.4] Starting 4 partition threads
Jul 31, 2018 3:21:02 PM     com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl
INFO: [MY_IP]:5701 [dev] [3.7.4] Starting 3 generic threads (1 dedicated for priority tasks)
Jul 31, 2018 3:21:02 PM com.hazelcast.nio.tcp.nonblocking.NonBlockingIOThreadingModel
INFO: [MY_IP]:5701 [dev] [3.7.4] TcpIpConnectionManager configured with Non Blocking IO-                    threading model: 3 input threads and 3 output threads
Jul 31, 2018 3:21:05 PM com.hazelcast.internal.cluster.impl.MulticastJoiner
INFO: [MY_IP]:5701 [dev] [3.7.4]



Members [1] {
    Member [MY_IP]:5701 - 
this
}

Jul 31, 2018 3:21:05 PM com.hazelcast.core.LifecycleService
INFO: [MY_IP]:5701 [dev] [3.7.4] [MY_IP]:5701 is 
STARTED
Jul 31, 2018 3:21:05 PM com.hazelcast.config.XmlConfigLocator
INFO: Loading 'hazelcast-default.xml' from classpath.
Jul 31, 2018 3:21:05 PM com.hazelcast.instance.DefaultAddressPicker
INFO: [LOCAL] [dev] [3.7.4] Prefer IPv4 stack is true.
Jul 31, 2018 3:21:05 PM com.hazelcast.instance.DefaultAddressPicker
INFO: [LOCAL] [dev] [3.7.4] Picked [MY_IP]:5702, using socket 
ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5702], bind any local is 
true
Jul 31, 2018 3:21:05 PM com.hazelcast.system
INFO: [MY_IP]:5702 [dev] [3.7.4] Hazelcast 3.7.4 (20161209 - 
3df1bb5) starting at [MY_IP]:5702
Jul 31, 2018 3:21:05 PM com.hazelcast.system
INFO: [MY_IP]:5702 [dev] [3.7.4] Copyright (c) 2008-2016, 
Hazelcast, Inc. All Rights Reserved.
Jul 31, 2018 3:21:05 PM com.hazelcast.system
INFO: [MY_IP]:5702 [dev] [3.7.4] Configured Hazelcast 
Serialization version : 1
Jul 31, 2018 3:21:05 PM 
com.hazelcast.spi.impl.operationservice.impl.BackpressureRegulator
INFO: [MY_IP]:5702 [dev] [3.7.4] Backpressure is disabled
Jul 31, 2018 3:21:05 PM com.hazelcast.instance.Node
INFO: [MY_IP]:5702 [dev] [3.7.4] Creating MulticastJoiner
Jul 31, 2018 3:21:05 PM com.hazelcast.core.LifecycleService
INFO: [MY_IP]:5702 [dev] [3.7.4] [MY_IP]:5702 is                     
Jul 31, 2018 3:21:05 PM 
com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl
INFO: [MY_IP]:5702 [dev] [3.7.4] Starting 4 partition threads
Jul 31, 2018 3:21:05 PM 
com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl
INFO: [MY_IP]:5702 [dev] [3.7.4] Starting 3 generic threads (1 
dedicated for priority tasks)
Jul 31, 2018 3:21:05 PM 
com.hazelcast.nio.tcp.nonblocking.NonBlockingIOThreadingModel
INFO: [MY_IP]:5702 [dev] [3.7.4] TcpIpConnectionManager 
configured with Non Blocking IO-threading model: 3 input threads and 3 
output threads
Jul 31, 2018 3:21:08 PM 
com.hazelcast.internal.cluster.impl.MulticastJoiner
INFO: [MY_IP]:5702 [dev] [3.7.4] 


Members [1] {
    Member [MY_IP]:5702 - 
this
}

Jul 31, 2018 3:21:08 PM com.hazelcast.instance.Node
WARNING: [MY_IP]:5702 [dev] [3.7.4] Config seed port is 5701 
and cluster size is 1. Some of the ports seem occupied!
Jul 31, 2018 3:21:08 PM com.hazelcast.core.LifecycleService
INFO: [MY_IP]:5702 [dev] [3.7.4] [MY_IP]:5702 is 
STARTED
Run Code Online (Sandbox Code Playgroud)

小智 6

正如您所指出的,您正在使用默认的 Hazelcast 配置,如日志中所示

INFO: Loading 'hazelcast-default.xml' from classpath.
Run Code Online (Sandbox Code Playgroud)

默认的 Hazelcast 配置用于多播。这对于快速开始使用多台机器来说是理想的选择,但对于一台机器来说不太好。

第一个Hazelcast.newHazelcastInstance()将在端口 5701 上启动一个多播组。

第二个Hazelcast.newHazelcastInstance()将发现端口 5701 正在使用,将占用下一个端口 5702,并在 5702 上启动多播组。

换句话说,第二个实例可以位于同一端口上,因此不能位于同一组中(因为该组基于端口)。所以你最终会得到两个集群,这不是你想要的。

有四个步骤可以实现您想要的目标。

  1. hazelcast.xml您的测试类路径中需要一个文件。
  2. 关闭多播
  3. 打开另一个发现,TCP 无疑是最简单的
  4. (可选)不要使用 3.7.4,它不是最新的,请使用 3.10.4

关闭多播不会打开 TCP。您可以选择没有发现(对于某些测试有用)。

所以你需要一个hazelcast.xml看起来像这样的:

<?xml version="1.0" encoding="UTF-8"?>
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.10.xsd"
       xmlns="http://www.hazelcast.com/schema/config"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <network> 
    <join>  
      <multicast enabled="false"/>
      <tcp-ip enabled="true">
        <interface>127.0.0.1</interface>
      </tcp-ip>
    </join>
  </network>
</hazelcast>
Run Code Online (Sandbox Code Playgroud)