我正在进行聊天实施。这个想法非常简单,有一个地图,其中键是userNames,值是消息队列,应该传递给用户
此地图由ConcurrentHashMap<String, <ConcurrentLinkedQueue<Message>>>
当用户的新消息到达时,它将写入此映射,并且每个用户使用简单的http池从队列中获取消息。这种方法很好。
现在我需要在集群中实现类似的功能。对于缓存复制,我使用jboss缓存。现在,缓存复制以同步方式工作。这意味着在写入其他节点之前,不会在本地节点上写入高速缓存。
基本上,缓存界面看起来与使用put和get方法的map类似。
现在我会复制整个队列。当新消息到达时,我从地图获取队列,在队列中添加新消息并在所有节点上“放置”(重写)新队列。
当请求来自用户以获取克隆当前队列的新消息时,在该节点上使与该用户关联的队列为空,并从克隆队列向用户传递消息。
我觉得有很多情况可能会出现问题。例如,我将消息放在节点A上的队列中,队列的复制开始,而现在在另一个节点B上,用户从队列中获取消息,使队列变空。之后,节点A的队列复制完成,节点B再次传递消息。用户两次收到相同的消息
在群集中实现此消息程序的常用方法是什么?