【发布时间】:2018-01-21 10:09:27
【问题描述】:
设置: Celery 4.1、RabbitMQ 3.6.1(作为代理)、Redis(作为后端,此处不相关)。
有两个兔子用户:
-
admin_user,权限为.* .* .*。 -
remote_user,权限为ack ack ack。
admin_user可以触发任务,被celery worker用来处理任务。
remote_user 只能触发一种类型的任务 - ack 并被排入专用的 ack 队列,该队列随后被 ack 工作人员(admin_user)使用。
remote_user通过以下代码发送任务:
from celery import Celery
app = Celery('remote', broker='amqp://remote_user:remote_pass@<machine_ip>:5672/vhost')
app.send_task('ack', args=('a1', 'a2'), queue='ack', route_name='ack')
这在 Celery 3.1 中完美运行。升级到 Celery 4.1 后,它不再发送任务。该调用返回AsyncResult,但我在 Celery 花(或通过兔子管理 ui)或日志中看不到该消息。
- 尝试将权限设置为
remote_user.* .* .*就像在admin_user中一样 - 没有帮助。 - 尝试添加
administrator标签 - 没有帮助。
将代理的用户更改为
'amqp://admin_user:admin_pass@<machine_ip>:5672/vhost' 确实有效:
from celery import Celery
app = Celery('remote', broker='amqp://admin_user:admin_pass@<machine_ip>:5672/vhost')
app.send_task('ack', args=('a1', 'a2'), queue='ack', route_name='ack')
但我不想给远程机器admin_user 权限。
知道我能做什么吗?
【问题讨论】:
标签: rabbitmq celery amqp celery-task rabbitmqctl