2013-10-14 76 views
1

我們正在評估RabbitMQ。試圖確定如何最好地將我們的一些流程實現爲消息傳遞應用程序,而不是傳統的數據庫存儲和抓取。這是場景。我們有一個執行類似任務的用戶部門。當他們將工作提交給服務器應用程序時,我們希望服務器應用程序將消息發送回通知窗口,告知所有用戶,而不僅僅是提交工作的用戶。這很容易做到。RabbitMQ訊息終身重播訊息

問題是我們希望這些消息能夠在Queue中生活4個小時。如果新用戶登錄或說主管,他們會收到最近4小時內發送到其通知窗口的所有消息。這使他們能夠快速查看最近發生的事情以及發生了什麼,而不必問別人,「你和約翰談過了什麼?」,「你給他發電子郵件是行程嗎?」等。

因此,我們如何發佈發佈時間爲x個小時的消息,並且任何連接的新消費者都將按時間順序獲得所有這些消息?最好這些消息在隊列過期後消失。

感謝

回答

2

Per-Queue Message TTL和RabbitMQ的Per-Message TTL。如果我是對的,你可以利用它們來完成你的任務。

+0

這不是對自己不夠好。每個用戶需要一個先驗創建的持久隊列,以便消息在那裏等待用戶選擇。否則,一旦讀取消息,新用戶如何登錄以查看他以前的消息。 – robthewolf

+0

我看到沒有問題讓每個用戶隊列併發布消息給他們。 – pinepain

+0

這取決於有多少用戶。但我只是添加它,因爲你沒有提到它。 – robthewolf

0

除了上面的答案,最好讓應用程序/客戶端發佈消息到兩個隊列。消費者將從一個隊列中消耗,而另一個隊列可以使用每個隊列消息TTL或每個消息TTL來配置以保留消息。

0

將消息從一個點發送到另一個點是可靠的。所以發送者可以獨立於接收者工作。你建議與臨時持久性商店合作。

一個sql數據庫完全適合,但也是一個mongodb會很好地工作。你用mongo刪除一個文檔,給它一個ttl並讓數據庫處理到期。

http://docs.mongodb.org/master/tutorial/expire-data/