2011-09-22 44 views
0

我有需要的消息隊列的系統的一些要求:哪個消息隊列可以處理用戶斷開連接後的專用隊列?

  1. 的用戶應獲得個人隊列。當用戶斷開
  2. 的用戶將能夠重新連接到自己的隊列,如果它失去連接
  3. 只有訂戶將能夠使用分配給它
  4. 隊列
  5. 各個隊列不得刪除
  6. 很高興有:隊列服務器重新啓動

可以用RabbitMQ來實現這一點,在這種情況下如何?

回答

7

我最近纔開始使用兔子,但我相信你的要求可以很容易地解決。 1)我已經通過讓訂閱者使用其機器名作爲隊列名稱的一部分聲明隊列(以及相關的路由鍵)來爲單個訂閱者實現特定的隊列。交換機通過綁定/路由密鑰來適當地路由消息。就我而言,所有訂閱者都會獲得發佈者發佈的相同消息的副本,並且任意數量的訂閱者可以聲明他們自己的隊列並開始接收消息。

2)這是非常標準的。如果您申報了一個隊列,那麼它將保留在交易所中,並且如果它被設置爲耐用,那麼它將在代理重新啓動後繼續存在。無論如何,你的用戶應該在啓動時調用queue.Declare()以確保隊列存在,但就用戶斷開連接而言,隊列將保持不變。

3)如果隊列在那裏,並且用戶正在按名稱監聽隊列,那麼沒有理由不能重新連接。

4)我還沒有真正鑽研兔子的安全方面。雖然我會讓其他人評論這一點,但我可能有保障個人排隊的方法,因爲我沒有權威。 5)參見(2)。如果將消息設置爲持久,然後將消息寫入磁盤,則消息也將在重新啓動後存活。由於有磁盤I/O,這會導致性能損失,但這與您所期望的類似。

所以基本上是的。兔子可以照你的要求做。就「如何」而言,「如何」程度有所不同。如果您在執行上述任何操作時遇到困難,請高興地嘗試爲您提供代碼級別的答案。與此同時,如果您還沒有這樣做,我建議您閱讀文檔: http://www.rabbitmq.com/documentation.html

HTH。史蒂夫

+0

現貨。優秀的答案。 –

+0

另外,近來在提高RabbitMQ處理持久消息和平穩重啓能力方面進行了大量工作。不要在操作系統的存儲庫中使用RabbitMQ。相反,從rabbitmq.com獲取.deb或.rpm文件。另外,如果可以,請安裝Erlang R14b3或R15B,而不是依賴Linux存儲庫中過時的版本。 –