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