Celery 引发 ImproperlyConfigured 异常

问题描述 投票:0回答:3

我正在 Celery 文档中测试以下情况,但引发了 ImproperlyConfigured 异常。 http://docs.celeryproject.org/en/master/userguide/calling.html#id3

Traceback (most recent call last):   
File "test.py", line 8, in <module> print(r.get(on_message=on_raw_message, propagate=False))   
File "/usr/local/python2.7/lib/python2.7/site-packages/celery/result.py", line 189, in get on_message=on_message,   
File "/usr/local/python2.7/lib/python2.7/site-packages/celery/backends/base.py", line 460, in wait_for_pending 'Backend does not support on_message callback')  
celery.exceptions.ImproperlyConfigured: Backend does not support on_message callback

测试代码为:

from celery_test.agent import hello
from celery_test.celery import app

def on_raw_message(body):
    print(body)

r = hello.apply_async(args=[122,34], queue='machine1', routing_key='machine1')
print(r.get(on_message=on_raw_message, propagate=False))

celery的输出-celery_测试报告

[root@zm03 script]# celery -A celery_test report

software -> celery:4.0.0 (latentcall) kombu:4.0.0 py:2.7.9
            billiard:3.5.0.2 py-amqp:2.1.1
platform -> system:Linux arch:64bit, ELF imp:CPython
loader   -> celery.loaders.app.AppLoader
settings -> transport:amqp results:amqp://[email protected]//

CELERY_DEFAULT_EXCHANGE_TYPE: 'direct'
CELERY_RESULT_SERIALIZER: 'json'
timedelta: <type 'datetime.timedelta'>
Exchange: <class 'kombu.entity.Exchange'>
CELERY_INCLUDE: ['celery_test.agent']
absolute_import: _Feature((2, 5, 0, 'alpha', 1), (3, 0, 0, 'alpha', 0), 16384)
Queue: <class 'kombu.entity.Queue'>
CELERY_TASK_RESULT_EXPIRES: 3600
CELERT_QUEUES:
    (<unbound Queue machine1 -> 'agent' -> machine1>,
 <unbound Queue machine2 -> 'agent' -> machine2>)
CELERY_ACCEPT_CONTENT: ['json']
CELERY_TASK_SERIALIZER: 'json'
BROKER_URL: u'amqp://guest:********@192.168.1.201:5672//'
CELERY_RESULT_BACKEND: u'amqp://[email protected]//'
CELERY_DEFAULT_EXCHANGE: 'agent'
python celery
3个回答
1
投票

rabbitmq 结果后端在 celery 5.x 中被删除,因为它在 v4.x 中已被弃用。


0
投票

显然芹菜似乎有一些bug。因为

on_message
应该与
rabbitmq
后端一起使用。

解决方法:移至

redis
以获取结果后端。

在以下拉取请求期间引入[确认],

https://github.com/celery/celery/pull/3477/files

我已经为您面临的错误创建了问题,

https://github.com/celery/celery/issues/3625


0
投票

就我而言,这个会议运行良好

CELERY_BROKER_URL=amqp://my_user:my_password@localhost:5672//```
© www.soinside.com 2019 - 2024. All rights reserved.