2011-10-05 51 views
0

我正在进行聊天实施。这个想法是很简单的有地图,其中键是用户名和值的消息队列应该由ConcurrentHashMap<String, <ConcurrentLinkedQueue<Message>>>基于队列的群集聊天实施

当新的传递消息的用户到达被写入这个被传递到用户

这张地图表示地图,并且每个用户使用简单的http pooling从队列中获取他们的消息。这种方法工作正常。

现在我需要在集群中实现类似的功能。对于缓存复制,我使用jboss缓存。现在缓存复制以同步方式工作。这意味着在写入其他节点之前,不会在本地节点上写入缓存。

基本上缓存界面看起来类似于put和get方法的映射。

现在我会复制整个队列。当新消息到达时,我从地图获取队列,在队列中添加新消息,并在所有节点上“放置”(重写)新队列。

当请求来自用户获取新消息克隆当前队列时,使与该用户关联的队列在所有节点上为空,并将消息从克隆队列传递给用户。

我觉得有很多的情况下,当有可能出错。例如,我把消息放在节点A的队列上,队列的复制已经开始,现在在另一个节点B上,用户从队列生成队列中取消消息。之后,节点A的队列复制完成,节点B再次传递消息。用户接收两次相同的消息

在集群中实现此消息例程的常用方法是什么?

回答