send_task 仅适用于特定用户
send_task works only with a specific user
设置: Celery 4.1,RabbitMQ 3.6.1(作为代理),Redis(作为后端,此处不相关)。
有两个兔子用户:
admin_user
权限为 .* .* .*
.
remote_user
权限为 ack ack ack
.
admin_user
可以触发任务,被celery worker用来处理任务。
remote_user
只能触发一种类型的任务 - ack
并排入专用的 ack
队列,稍后由 ack
worker 使用(由 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 后,它不再发送任务。调用 returns 和 AsyncResult
但我没有在芹菜花(或通过兔子管理 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
权限。
知道我能做什么吗?
已解决,
我猜 API 已更改,但为了保持 RabbitMQ 的当前权限,我不得不使用以下路径:
old_celery_config.py:(芹菜 3.1)
CELERY_ROUTES = {
'ack_task': {
'queue': 'geo_ack'
}
}
celery_config.py:(芹菜 4.1)
CELERY_ROUTES = {
'ack_task': {
'exchange': 'ack',
'exchange_type': 'direct',
'routing_key': 'ack'
}
}
run_task.py:
from celery import Celery
app = Celery('remote', broker='amqp://remote_user:remote_pass@<machine_ip>:5672/vhost')
app.config_from_object('celery_config')
app.send_task('ack_task', args=('a1', 'a2'))
设置: Celery 4.1,RabbitMQ 3.6.1(作为代理),Redis(作为后端,此处不相关)。
有两个兔子用户:
admin_user
权限为.* .* .*
.remote_user
权限为ack ack ack
.
admin_user
可以触发任务,被celery worker用来处理任务。
remote_user
只能触发一种类型的任务 - ack
并排入专用的 ack
队列,稍后由 ack
worker 使用(由 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 后,它不再发送任务。调用 returns 和 AsyncResult
但我没有在芹菜花(或通过兔子管理 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
权限。
知道我能做什么吗?
已解决, 我猜 API 已更改,但为了保持 RabbitMQ 的当前权限,我不得不使用以下路径:
old_celery_config.py:(芹菜 3.1)
CELERY_ROUTES = {
'ack_task': {
'queue': 'geo_ack'
}
}
celery_config.py:(芹菜 4.1)
CELERY_ROUTES = {
'ack_task': {
'exchange': 'ack',
'exchange_type': 'direct',
'routing_key': 'ack'
}
}
run_task.py:
from celery import Celery
app = Celery('remote', broker='amqp://remote_user:remote_pass@<machine_ip>:5672/vhost')
app.config_from_object('celery_config')
app.send_task('ack_task', args=('a1', 'a2'))