应用程序群集时,在两个JVM之间共享数据

时间:2017-06-05 12:46:22

标签: java spring jvm cluster-computing

我正在开发一个spring-boot应用程序,它可以聚集到很多实例中。

会话数据由Spring Session + Hazelcast存储和处理,但问题出在这样的情况下。我有一个包含一组对象的类:

@ServerEndpoint(value="/chat/{username}")
public class ChatEndpoint {

    private Session session;
    private static Set<ChatEndpoint> chatEndpoints 
      = new CopyOnWriteArraySet<>();
    private static HashMap<String, String> users = new HashMap<>();

    @OnOpen
    public void onOpen(
      ....
    }

    @OnMessage
    public void onMessage(Session session, Message message) 
      throws IOException {
      ....
    }
   ....
}

在这种情况下,数据在JVM的每个实例上都是本地可用的。如何在所有JVM之间共享这些数据?

1 个答案:

答案 0 :(得分:1)

由于您的技术堆栈中已有Hazelcast,请使用caching facility of Hazelcast

  

Hazelcast是领先的内存数据网格解决方案。它的java   缓存解决方案使组织可以预测扩展   通过提供内存访问来实现任务关键型企业应用程序   经常使用的数据。 Hazelcast存储经常访问的数据   内存中和跨弹性可伸缩数据网格。这使得   任何机器网络,动态地集群和汇集两个内存   和处理器,以加快应用程序性能。

您可以将数据集放入使用Hazelcast创建的缓存中,并访问群集中其他节点上的数据。