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

Share data between two JVMs when application is clustered

我正在开发一个 spring-boot 应用程序,它可以集群成许多实例。

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

@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 之间共享?

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

Hazelcast is the leading in-memory data grid solution. Its java caching solution enables organizations to predictably scale mission-critical enterprise applications by providing in-memory access to frequently used data. Hazelcast stores frequently accessed data in-memory and across an elastically scalable data grid. This enables any network of machines to dynamically cluster and pool both memory and processors to accelerate application performance.

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