java - 访问同一 JVM 上的单个 hazelcast 实例

标签 java jvm hazelcast

我有一个 Java Web 应用程序(在 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.

最佳答案

您可以使用 Hazelcast::getHazelcastInstanceByName 检索相同的实例,但这要求这些类对两个 Web 应用程序类加载器都可见。您可以通过将 JAR 文件放入 tomcat lib 目录来实现这一点。

除此之外,Hazelcast 并非设计为在单实例模式下运行,因此性能不佳。

关于java - 访问同一 JVM 上的单个 hazelcast 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28310656/

相关文章:

java - 如何查看 Hazelcast 缓存日志

java - 使用淡褐色类型转换锁协调任务

java - 从 IntelliJ 调用 Maven 模块构建

java - 将 Long 转换为 BigDecimal

java - 有没有办法用 JNI 设置 DirectByteBuffer 内存?

java - 如何从 C 中加载和调用 java 编译的类?

hazelcast - 使用 Hazelcast 作为服务目录?

java - Java 查找所有可能的路线

java - 将文件读入数组时出现 NullPointerException

java - JVMTI _jclass toString