RabbitMQ中的动态ACL

时间:2011-05-13 19:47:31

标签: acl rabbitmq amqp

我正在考虑RabbitMQ对创建多用户聊天系统的用处。人们可以在不同的房间聊天,一些是公共的,一些是私人的,也可以是私人的。是否可以实现私人,仅限邀请的房间的功能?对于个人对个人,我可能能够使用随机字符串作为队列/交换名称,但这对于能够重新启用该功能的私人房间不起作用。

rabbitmqctl的功能是否可用于(选定)客户端,以及ACL的可扩展性如何?对于匹配"<user>.*"的规则,ACL是否可以引用用户名?

2 个答案:

答案 0 :(得分:1)

我想我已经开始了一个可行的解决方案。我将创建一个公共交换,任何用户都可以向其发送房间加入请求。 “服务器”软件(实际上只是另一个RabbitMQ客户端)从此队列中消耗,如果允许用户加入,则将会议室的外发消息扇出交换绑定到用户的队列。用户将获得包含^public/.*之类的ACL,因此他们只能发布到公共交易所。

答案 1 :(得分:0)

您可以在用户级别的RabbitMQ上配置ACL和各个资源(使用正则表达式的队列或交换) - 但我不相信大多数客户端都会公开此功能。

如果您打算构建一个聊天客户端,那么使用ejabberd(http://www.ejabberd.im/)会更好,这种情况就是为这种情况而构建的:

Multi-User Chat with eJjabberd