2016-05-29 37 views
3

我正在建立一個網站,該網站接收關於足球比賽的實時更新。我正在使用RabbitMQ將更新發送到客戶端(JS網站和Android/iOS應用程序)。AMQP/RabbitMQ - 只有實時消息/傳遞隊列

客戶端應該只接收實時更新。換句話說,客戶端只應在用戶登錄時接收更新。不保存歷史記錄。

爲了實現這種行爲,我在想下面的架構:

  • 在RabbitMQ的扇出交換。
  • 每個用戶都有一個專用隊列,綁定到交換機。該隊列在創建用戶帳戶時創建。
  • 對於這些隊列,設置值爲0的隊列屬性x-message-ttl。見下文。
  • 當用戶登錄時,客戶端將消耗相應用戶的隊列。
  • 消息由後端發送到交換機,並轉發到所有隊列。當用戶沒有登錄,消息會被立即丟棄,因爲x-message-ttl設置爲0

這是AMQP的正確用法/ RabbitMQ的,以實現實時通知?

回答

2

是和否 - 你的一些前提是錯誤的。

  • In other words, a client should only receive updates when the user is logged in.當用戶沒有登錄時,只需將連接放到RMQ即可。
  • Each user has a dedicated queue, which is bound to the exchange. This queue is created when the user account is created.只有在建立與RMQ的連接後,才應該創建隊列,這樣您還可以覆蓋When a user is not logged in, the message will be discarded immediately部件。
  • 無需將TTL設置爲0.
  • Messages are sent to the exchange by the backend, and forwarded to all queues要說清楚的是,它是從交換到隊列「轉發」的RabbitMQ。
+0

如果隊列是在登錄後創建的,那麼這是否意味着隊列應該聲明爲「auto-delable」? –

+0

登錄是指登錄到您的網站或登錄 - 建立與RMQ的連接?如果您不希望用戶登錄(從網站/ web應用程序)登錄時錯過的消息,而不是自動刪除。 – cantSleepNow

+0

謝謝,現在明白了。我不明白隊列是要在運行中創建/刪除的。我認爲隊列應該或多或少是靜態的。我會試試看。 –