我正在开发一个典型的SaaS产品,用户可以登录并做某事。
前端是用于网络的JS和用于智能手机的Android。前端应该在更新某些内容时收到通知,以便他们可以刷新他们的视图。我正在考虑将RabbitMQ用于此目的。
我的建议是每个用户都有自己的交换。当用户发生有趣的事情时,会向他的交易所发送一条消息。接下来,当前端登录时,它可以创建一个独占/自动删除,绑定到他的交换。因此,每个前端会话都有自己的独占/自动删除队列。因此,所有活动/在线前端都会检索通知,因为每个活动/在线前端都有自己的私有队列,这是预期的行为。
现在我的问题是:如何防止前端声明其他类型(可能是持久的)队列?应该只允许前端创建自己的独占/自动删除队列,仅此而已。我仔细阅读了文档(https://www.rabbitmq.com/access-control.html),但似乎没有直接支持?
答案 0 :(得分:0)
您可以使用rabbitmq_auth_backend_http社区插件,然后构建您自己的自定义Web应用程序,RabbitMQ将调用该应用程序来授权每个请求。 Web应用程序非常简单,只需要实现三个端点,并且可以用您选择的任何语言编写。
可在此处找到更多信息:https://github.com/rabbitmq/rabbitmq-auth-backend-http示例文件夹中还有一个Django应用,您可以自定义该应用以支持您的独特需求。
此外,您可以为所有用户使用单个主题交换。每个用户都可以拥有绑定到该主题交换的唯一队列,以便具有用户密钥的所有消息将通过交换发送到其队列。您可以使用自定义授权API确保用户仅发布和订阅他们有权使用的队列,因为授权Web应用程序知道用户尝试将消息发布到的主题密钥。