【问题标题】:Access refused for user rabbitmq & celery用户 rabbitmq 和 celery 访问被拒绝
【发布时间】:2014-10-20 17:14:47
【问题描述】:

我创建虚拟主机:

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'

如何解决?

【问题讨论】:

    标签: python rabbitmq celery


    【解决方案1】:

    在这里查看 set_permissions:https://www.rabbitmq.com/rabbitmqctl.8.html#Access_control

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

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

    【讨论】:

    • 谢谢。我尝试在 set_permissions 中使用 celeryev,但我在交换 reply.celery.pidbox 时遇到错误,所以现在我使用 '.*' 并且它可以工作。它会保存还是我需要使用正则表达式'celery'?
    • 正则表达式需要与您计划创建的队列/交换的名称相匹配。
    【解决方案2】:

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

    ".*"
    

    而不是

    “.*”
    

    可以肯定的是,在您的 vhostpath 中列出用户的权限(默认为 /)

    rabbitmqctl list_permissions -p /  
    

    【讨论】:

      【解决方案3】:

      正如 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 .*  .*  .*
      

      为我工作。

      【讨论】:

        【解决方案4】:

        我再次确认之前有关赠款的详细信息。

        问题: 导致通道异常 access_refused: access to exchange 'reply.celery.pidbox'

        解决方案: rabbitmqctl clear_permissions -p 环境用户名 rabbitmqctl set_permissions -p environment skberge "." "." ".*"

        【讨论】:

          猜你喜欢
          • 2020-07-29
          • 2010-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-27
          • 2017-07-19
          相关资源
          最近更新 更多