2016-09-24 61 views
0

我正在開發一個典型的SaaS產品,用戶可以登錄並且做點什麼RabbitMQ - 訪問控制:只允許排他/自動刪除隊列

前端是用於智能手機的Web和Android的JS。前端在更新某些內容時應該會收到通知,這樣他們可以刷新自己的觀點。我正在考慮使用RabbitMQ來達到這個目的。

我的建議是每個用戶都有自己的交換機。當用戶發生一些有趣的事情時,一條消息被髮送給他的交易所。接下來,當前端登錄時,它可以創建一個排他/自動刪除,綁定到他的交易所。所以,每個前端會話都有自己的專有/自動刪除隊列。因此,所有活動/在線前端都會檢索通知,因爲每個通知都有其自己的專用隊列,這是預期的行爲。

現在我的問題:我怎樣才能防止前端聲明其他種類(可能是持久的)隊列?只能允許前端創建自己的排他/自動刪除隊列,僅此而已。我通讀了文檔(https://www.rabbitmq.com/access-control.html),但似乎沒有直接支持?

回答

0

您可以使用rabbitmq_auth_backend_http社區插件,然後構建您自己的自定義Web應用程序,RabbitMQ將調用該應用程序來授權每個請求。 Web應用程序非常簡單,只需要實現三個端點,並且可以用您選擇的任何語言編寫。

更多信息可以在這裏找到:https://github.com/rabbitmq/rabbitmq-auth-backend-http在examples文件夾中還有一個Django應用程序,您可以自定義以支持您的獨特需求。

此外,您可以爲所有用戶使用單個主題交換。每個用戶都可以擁有一個綁定到該話題交換的唯一隊列,這樣所有帶有用戶密鑰的消息都將通過交換機發送到他們的隊列中。您可以使用自定義授權API來確保用戶只發布和訂閱授權的隊列,因爲授權Web應用程序知道用戶試圖發佈消息的主題密鑰。