在同一 JVM 上访问单个 hazelcast 实例
Access single hazelcast instance on same JVM
我有一个 Java 网络应用程序(运行 在 Tomcat 上)并且想在应用程序的两个不同上下文之间共享数据。我想使用 hazelcast,因为我已经将它用于集群目的。
有没有办法在同一 JVM(和同一端口)上访问单个 hazelcast 实例 运行?
我尝试使用实例名称访问实例,但这似乎不起作用。例如:
public class HazelcastTest1 {
static public void main(String[] args) {
Config config = new Config();
config.getNetworkConfig().setPort(5701);
config.getNetworkConfig().setPortAutoIncrement(false);
config.setInstanceName("hztest");
HazelcastInstance hz = Hazelcast.getOrCreateHazelcastInstance(config);
Map<String, String> mp = hz.getMap("vcutest");
mp.put("test1", "test1");
System.out.printf("put item in map");
while (true) {
}
}
}
public class HazelcastTest2 {
static public void main(String[] args) {
Config config = new Config();
config.getNetworkConfig().setPort(5701);
config.getNetworkConfig().setPortAutoIncrement(false);
config.setInstanceName("hztest");
HazelcastInstance hz = Hazelcast.getOrCreateHazelcastInstance(config);
Map<String,String> mp = hz.getMap("vcutest");
System.out.printf("map value = %s%n", mp.get("test1"));
}
}
当我启动第二个实例时(第一个实例已经 运行),抛出以下异常:
Exception in thread "main" com.hazelcast.core.HazelcastException: Port
[5701] is already in use and auto-increment is disabled. Hazelcast
cannot start.
如果您要部署两个单独的 WAR,尽管它们位于同一个 JVM 中,但它们处于隔离的 class 加载程序中。
您应该将它们视为单独的 JVM,并按预期使用 Hazelcast(让每个网络应用加入集群)
在这种情况下,启用端口自动递增,这应该允许它加入同一个 Hazelcast 实例
您可以使用 Hazelcast::getHazelcastInstanceByName
检索相同的实例,但这需要 类 对两个 webapp 类加载器可见。您可以通过将 JAR 文件放入 tomcat lib 目录来实现。
除此之外,Hazelcast 并未设计为 运行 在单实例模式下,这将无法正常运行。
我有一个 Java 网络应用程序(运行 在 Tomcat 上)并且想在应用程序的两个不同上下文之间共享数据。我想使用 hazelcast,因为我已经将它用于集群目的。
有没有办法在同一 JVM(和同一端口)上访问单个 hazelcast 实例 运行?
我尝试使用实例名称访问实例,但这似乎不起作用。例如:
public class HazelcastTest1 {
static public void main(String[] args) {
Config config = new Config();
config.getNetworkConfig().setPort(5701);
config.getNetworkConfig().setPortAutoIncrement(false);
config.setInstanceName("hztest");
HazelcastInstance hz = Hazelcast.getOrCreateHazelcastInstance(config);
Map<String, String> mp = hz.getMap("vcutest");
mp.put("test1", "test1");
System.out.printf("put item in map");
while (true) {
}
}
}
public class HazelcastTest2 {
static public void main(String[] args) {
Config config = new Config();
config.getNetworkConfig().setPort(5701);
config.getNetworkConfig().setPortAutoIncrement(false);
config.setInstanceName("hztest");
HazelcastInstance hz = Hazelcast.getOrCreateHazelcastInstance(config);
Map<String,String> mp = hz.getMap("vcutest");
System.out.printf("map value = %s%n", mp.get("test1"));
}
}
当我启动第二个实例时(第一个实例已经 运行),抛出以下异常:
Exception in thread "main" com.hazelcast.core.HazelcastException: Port [5701] is already in use and auto-increment is disabled. Hazelcast cannot start.
如果您要部署两个单独的 WAR,尽管它们位于同一个 JVM 中,但它们处于隔离的 class 加载程序中。
您应该将它们视为单独的 JVM,并按预期使用 Hazelcast(让每个网络应用加入集群)
在这种情况下,启用端口自动递增,这应该允许它加入同一个 Hazelcast 实例
您可以使用 Hazelcast::getHazelcastInstanceByName
检索相同的实例,但这需要 类 对两个 webapp 类加载器可见。您可以通过将 JAR 文件放入 tomcat lib 目录来实现。
除此之外,Hazelcast 并未设计为 运行 在单实例模式下,这将无法正常运行。