2016-09-24 34 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应用程序知道用户试图发布消息的主题密钥。