访问被拒绝用户rabbitmq&芹菜

时间:2014-10-20 17:14:48

标签: python rabbitmq celery

我创建了vhost:

rabbitmqctl add_vhost test

然后用户:

rabbitmqctl add_user user 123456

然后我获得该用户的权限:

rabbitmqctl set_permissions -p test user "test" "test" "test"

我在tasks.py中使用Celery:

app = Celery('tasks', broker='amqp://user:123456@localhost/test', backend='amqp://user:123456@localhost/test')

然后我跑:

celery -A tasks worker --loglevel=info

我有错误:

amqp.exceptions.AccessRefused: Exchange.declare: (403) ACCESS_REFUSED - access to exchange 'celeryev' in vhost 'test' refused for user 'user'

如何解决这个问题?

4 个答案:

答案 0 :(得分:10)

在这里查看set_permissions:https://www.rabbitmq.com/man/rabbitmqctl.1.man.html#Access%20control

当您调用set_permissions时,您正在通过“test”进行配置,读取和写入,因此您的用户将只能使用名为“test”的队列/交换

另外,请看一下此链接:https://www.rabbitmq.com/access-control.html

答案 1 :(得分:3)

如果您仍然有错误,请检查您是否有正确的双引号(发生在我身上)

".*"

而不是

“.*”

要确保,请列出vhostpath中用户的权限(默认情况下为/)

rabbitmqctl list_permissions -p /  

答案 2 :(得分:2)

正如Lexsoul提到的双引号可能是错误的类型, 例如:

sudo rabbitmqctl list_permissions -p EDO_DEVELOPING
*Listing permissions in vhost "EDO_DEVELOPING" ...
billing “.*”    “.*”    “.*”

并且没有用,所以我尝试了:

sudo rabbitmqctl clear_permissions -p EDO_DEVELOPING billing
Clearing permissions for user "billing" in vhost "EDO_DEVELOPING" ...

sudo rabbitmqctl set_permissions -p EDO_DEVELOPING billing ".*" ".*" ".*"
Setting permissions for user "billing" in vhost "EDO_DEVELOPING" ...

然后

sudo rabbitmqctl list_permissions -p EDO_DEVELOPING 
Listing permissions in vhost "EDO_DEVELOPING" ...
billing .*  .*  .*

为我工作。

答案 3 :(得分:0)

我再次确认之前有关赠款的细节。

问题: 导致频道异常access_refused:交换“ reply.celery.pidbox”的权限

解决方案: rabbitmqctl clear_permissions -p环境用户名 rabbitmqctl set_permissions -p环境skberge“。”“。”“。*”