2011-10-05 52 views
0

我正在進行聊天實施。這個想法是很簡單的有地圖,其中鍵是用戶名和值的消息隊列應該由ConcurrentHashMap<String, <ConcurrentLinkedQueue<Message>>>基於隊列的羣集聊天實施

當新的傳遞消息的用戶到達被寫入這個被傳遞到用戶

這張地圖表示地圖,並且每個用戶使用簡單的http pooling從隊列中獲取他們的消息。這種方法工作正常。

現在我需要在集羣中實現類似的功能。對於緩存複製,我使用jboss緩存。現在緩存複製以同步方式工作。這意味着在寫入其他節點之前,不會在本地節點上寫入緩存。

基本上緩存界面看起來類似於put和get方法的映射。

現在我會複製整個隊列。當新消息到達時,我從地圖獲取隊列,在隊列中添加新消息,並在所有節點上「放置」(重寫)新隊列。

當請求來自用戶獲取新消息克隆當前隊列時,使與該用戶關聯的隊列在所有節點上爲空,並將消息從克隆隊列傳遞給用戶。

我覺得有很多的情況下,當有可能出錯。例如,我把消息放在節點A的隊列上,隊列的複製已經開始,現在在另一個節點B上,用戶從隊列生成隊列中取消消息。之後,節點A的隊列複製完成,節點B再次傳遞消息。用戶接收兩次相同的消息

在集羣中實現此消息例程的常用方法是什麼?

回答