基于Queue的群集聊天实现

时间:2011-10-05 21:12:05

标签: java chat cluster-computing jboss-cache

我正在进行聊天实施。这个想法非常简单,有一个地图,其中键是userNames,值是消息队列,应该传递给用户

此地图由ConcurrentHashMap<String, <ConcurrentLinkedQueue<Message>>>

表示

当用户的新消息到达时,它将写入此映射,并且每个用户使用简单的http池从队列中获取消息。这种方法很好。

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

基本上,缓存界面看起来与使用put和get方法的map类似。

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

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

我觉得有很多情况可能会出现问题。例如,我将消息放在节点A上的队列中,队列的复制开始,而现在在另一个节点B上,用户从队列中获取消息,使队列变空。之后,节点A的队列复制完成,节点B再次传递消息。用户两次收到相同的消息

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

1 个答案:

答案 0 :(得分:0)

简而言之,消息传递。您可以根据JMS自行推送,也可以使用Enterprise Service Bus