当从一个用户向另一个用户发送消息时,防止在RabbitMQ中进行拦截

时间:2014-10-11 13:59:04

标签: rabbitmq amqp

我最近开始使用rabbitmq。在前端我使用SockJS + Stomp。在rabbitmq中,我创建了交换"消息"类型"主题"。在连接时,Stomp会像amq.gen-Uf_bUS-5GG3WyzOn_avMig一样创建队列,并订阅"消息"。我无法理解访问权限。

考虑一个简单的动作。一个用户向另一个用户发送消息。如何确保在rabbitmq中访问此消息只有这两个用户?

或者例如,我需要向一个用户发送系统消息。如何使此消息仅供此用户使用?

1 个答案:

答案 0 :(得分:2)

在AMQP中,任何内部单个vhost中的任何队列都可以绑定到任何交换,因此任何具有从队列中读取的访问权限的AMQO用户都可以从队列中获取消息并将其读取(并且可能在使用手动确认时将其置回而不是确认已收到的消息。

如果AMQP用户具有可能访问任何实体的配置/写入权限,则包括: vhost中的消息。

有关权限如何工作的详细信息,请参阅Access Control RabbitMQ手册。

通常,将访问控制从应用程序级别移动到AMQP代理程序并不是一个好主意。如果您希望应用程序内的特殊用户可以看到某些内容,请在应用程序级别中进行操作。您的应用程序用户和RabbitMQ用户并不完全相同。 RabbitMQ用户在某种程度上类似于MySQL用户:它们满足特殊需求,仅此而已。