当前位置: 首页 > 知识库问答 >
问题:

在同一JVM上访问单个hazelcast实例

仲孙宇定
2023-03-14

我有一个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"));
    }
}

当我启动第二个实例(第一个实例已经运行)时,会引发以下异常:

线程“main”com中出现异常。黑泽尔卡斯特。果心HazelcastException:端口[5701]已在使用中,并且禁用了自动增量。Hazelcast无法启动。

共有2个答案

岳曦
2023-03-14

如果要部署两个独立的WAR,尽管它们在同一个JVM中,但它们在独立的类加载器中。

您应该将它们视为单独的JVMs,并使用HAZELCAST(让每个Web应用程序加入集群)。

在这种情况下,启用端口自动增量,这应该允许它加入相同的Hazelcast实例

林蕴藉
2023-03-14

您可以使用Hazelcast::getHazelcastInstanceByName检索同一实例,但这要求两个webapp类加载器都可以看到这些类。您可以通过将JAR文件放在tomcat lib目录中来实现这一点。

除此之外,Hazelcast不是设计为在单实例模式下运行的,这将无法很好地执行。

 类似资料:
  • 我对Spring框架有点陌生。我有一个用Spring (4.2.1)编写的web应用程序。我正在尝试使用千分尺库来揭示度量标准,并将与普罗米修斯一起使用。 应用程序的相关结构如下: -核心模块(JAR) -webservice模块(WAR) 我创建了一个PrometheusService类,它是在核心模块中定义的bean。bean中定义的是和: 我创建了指标资源,它是一个公开 /Metrics e

  • 我的查询如下: > 在我的应用程序中,我需要在计划中同时运行多个pyspark应用程序。是否有任何方法可以同时从spark驱动程序运行多个pyspark应用程序,从而创建单独的sparkcontext对象? 如果第一个查询的答案是否定的,那么我可以运行一个应用程序从驱动程序,另一个从执行程序,但我可以一次运行它。 null 配置:VM-1:Hadoop主节点、Spark驱动程序和执行程序、Mong

  • 我在与Hawtio相同的JVM中部署了10个Camel组件。 每一个都是唯一的,有不同的ID。 我可以通过JMX视图看到所有10个,但通过“骆驼”视图只能看到9个。

  • 我得写一个石英调度器来在Spring运行一个作业。我还需要添加另一个函数来暂停同一个作业。此代码存在于单个独立批处理中。 触发这两个功能:1。开始工作2。暂停作业我已经用main()编写了两个类来执行。 问题是当我触发pauseJobs的main()时,它会启动不同的应用程序上下文,而不是使用相同的应用程序上下文。 > 用于Application Context初始化的Singleton类 类开始

  • 我正在我的Java SSE(Java Flex)应用程序中使用Quartz Scheduler 2.2.0。我设定了一个时间表,每天上午10点运行,并执行一些工作。我没有关闭Quartz调度程序,因为我想让它每天运行。 但无论如何,我知道Quartz调度程序已经在运行,因为如果我在用户打开Java Flex应用程序时启动它,那么就会有多个实例存在。 Quartz.Properties 这就是我安排

  • 我有一个多Maven模块Spring Boot项目,具有以下结构: webservices和backend都是单独的Spring Boot应用程序(它们生成一个jar文件,我用它来启动它们),它们依赖于commons模块。因此,我将commons作为一个依赖项包含在webservices和后端的pom中。xml。 我对启动我的应用程序没有什么疑问。 如何在单个JVM中启动后端和webservice