设置: Celery 4.1、RabbitMQ 3.6.1(作为代理)、Redis(作为后端,此处不相关)。
有两个兔子用户:
admin_user
具有.* .* .*
.remote_user
具有ack ack ack
.
admin_user
可以触发任务,被芹菜工人用来处理任务。
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
权限。知道我能做什么吗?