执行celery -A draft1 beat时遇ACCESS_REFUSED认证错误求助
解决Celery Beat执行时的AMQPLAIN认证拒绝问题
你碰到的这个ACCESS_REFUSED错误,本质是Celery Beat在尝试连接消息代理(大概率是RabbitMQ)时,AMQPLAIN认证失败了。从报错回溯来看,问题出在Beat启动调度器后尝试连接代理的环节,下面是几个针对性的排查和解决步骤:
先核对Celery的Broker配置
首先确认你的Celery项目里Broker URL的配置是否正确,格式应该是amqp://用户名:密码@主机地址:端口/虚拟主机。比如在代码里配置的话:from celery import Celery app = Celery('draft1') # 这里的用户名、密码、主机要和RabbitMQ的实际配置完全匹配 app.conf.broker_url = 'amqp://guest:guest@localhost:5672//'如果你是用环境变量
CELERY_BROKER_URL来配置的,也要检查这个变量的值有没有写错。验证RabbitMQ的用户权限
很多时候认证失败是因为用户不存在或者没有对应虚拟主机的权限:- 先列出所有RabbitMQ用户,确认你用的用户名存在:
rabbitmqctl list_users - 检查该用户对目标虚拟主机的权限:
正常需要有rabbitmqctl list_user_permissions 你的用户名configure、write、read三种权限,如果没有,就给用户添加权限(以默认虚拟主机/为例):rabbitmqctl set_permissions -p / 你的用户名 ".*" ".*" ".*"
- 先列出所有RabbitMQ用户,确认你用的用户名存在:
确认RabbitMQ启用了AMQPLAIN认证机制
AMQPLAIN是RabbitMQ默认的认证机制,但如果被修改过就会导致拒绝。可以用命令查看当前启用的认证机制:rabbitmqctl list_auth_mechanisms如果列表里没有AMQPLAIN,需要修改RabbitMQ的配置文件启用它,或者重置RabbitMQ的配置(注意提前备份数据)。
查看代理日志找具体原因
报错提示里提到了“详情请查看代理日志文件”,RabbitMQ的日志一般在/var/log/rabbitmq/目录下(Linux系统),日志里会明确告诉你是用户名错了、密码不对还是权限不足,这是最直接的定位方式。修改配置后重启服务
不管是改了Celery配置还是RabbitMQ的用户权限,记得重启RabbitMQ服务:sudo systemctl restart rabbitmq-server然后再重新启动Celery Beat:
celery -A draft1 beat
内容的提问来源于stack exchange,提问作者Zorgan
相关产品推荐
相关产品推荐

