0

我正在研究聊天实施。这个想法很简单,其中键是用户名,值是应该传递给用户的消息队列

这张地图由ConcurrentHashMap<String, <ConcurrentLinkedQueue<Message>>>

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

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

基本上缓存接口看起来类似于带有 put 和 get 方法的 map。

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

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

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

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

4

1 回答 1

0

简而言之,消息传递。您可以基于 JMS 自行开发,或使用Enterprise Service Bus

于 2011-10-06T03:36:05.423 回答