兔子消息队列(RabbitMQ)通过终端声明交换机 - 访问被拒绝:/api/exchanges/

27

我正在使用RabbitMQ处理我所在企业应用程序中的数据库之间的消息。作为这个过程的一部分,我试图帮助自动化服务器的设置(例如脚本)。在这个过程中,我尝试使用rabbitmqadmin从命令提示符中声明交换机。我有两个不同的服务器运行CentOS 5.xCentOS 6.x,并且两者都遇到了相同的问题。

到目前为止,我已经声明了一个管理员用户并设置了其密码,然后将其标记设置为管理员标记,接着我确保它具有访问虚拟主机的权限。之后,我尝试声明交换机,并指定用户名和密码,但是失败了。

rabbitmqctl add_user administrator password
rabbitmqctl set_user_tags administrator administrator
rabbitmqctl set_permissions -p / administrator ".*" ".*" ".*"
rabbitmqctl add_vhost vhostFoo
rabbitmqctl set_permissions -p vhostFoo administrator ".*" ".*" ".*"
rabbitmqadmin -u administrator -p password declare exchange --vhost=vhostFoo name=exchangeNew type=direct

对于CentOS 5.x,我必须使用python26 rabbitmqadmin而不是rabbitmqadmin,但获得相同的结果。

最后一个命令的结果为:

*** Access refused: /api/exchanges/vhostFoo/exchangeNew

我的CentOS 5.x和CentOS 6.x都在运行rabbitmq 3.3.5,你有什么想法或者知道如何获取更多的信息(比如错误日志文件或者获取更详细的输出)吗?

3个回答

43

我解决了我的问题,想把答案发帖分享以便其他人遇到同样的问题能够参考。我检查了我的 /var/log/rabbitmq/ 目录,最后一行显示用户 'guest' 被拒绝访问我的虚拟主机 'vhostFoo'。基于这个信息,我意识到我的参数顺序可能不正确,事实上就是这种情况。我使用以下代码,它正常工作:

rabbitmqadmin declare exchange --vhost=vhostFoo name=exchangeNew type=direct -u administrator -p password 

4
显然,现在无论我们选择执行哪个命令,rabbitmqadmin都需要设置用户名和密码,这是件好事! - stratis

5

对于我来说,将管理员用户的用户名和密码 (-u administrator -p password) 添加到命令中解决了问题。


0

您可以在本地系统上添加具有管理员权限的用户。 在浏览器中输入http://localhost:15672/#/。在该管理选项卡中,您可以创建一个具有管理员权限的用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接