Celery worker没有向rabbitmq发布消息



我有一个设置,其中celery_result_backend已配置为'amqp'。我可以在日志中看到工作线程正在执行我的任务。但它正在创建具有任务id的队列,但其状态已过期。我没有得到结果(结果= AsyncResult(task);result.get()挂)。我试了所有背支撑的:1)Mysql:它不把数据放到芹菜创建的表2) Redis:它没有把数据放到db

I双中心系统。1)我正在调用延迟方法将任务发送到适当的rabbitmq。工作线程正在监听队列,从那里它将选择任务和进程(我可以看到队列中的任务,并由机器2中的工作线程执行),但结果不会被放入后端。).get()它挂起了

2)工人正在运行它来执行任务。它执行了任务,但是我想它不能输出结果

设置:

RABBITMQ_BROKER_HOST = '10.213.166.133'
RABBITMQ_BROKER_PORT = dqms_settings.RABBITMQ_BROKER_PORT
RABBITMQ_BROKER_VHOST = dqms_settings.RABBITMQ_BROKER_VHOST
RABBITMQ_BROKER_USERNAME = dqms_settings.RABBITMQ_BROKER_USERNAME
RABBITMQ_BROKER_PASSWORD = dqms_settings.RABBITMQ_BROKER_PASSWORD
BROKER_URL = 'amqp://%s:%s@%s:%s/%s' % (RABBITMQ_BROKER_USERNAME,
                                        RABBITMQ_BROKER_PASSWORD,
                                        RABBITMQ_BROKER_HOST,
                                        RABBITMQ_BROKER_PORT,
                                        RABBITMQ_BROKER_VHOST)
#CELERY_TASK_RESULT_EXPIRES = 18000
#CELERY_IGNORE_RESULT = True
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
#CELERY_RESULT_BACKEND = 'db+mysql://svcacct-dqms:s3cretP@ssw0rd@10.213.166.202:3306/dqms'
#CELERY_RESULT_BACKEND = 'amqp'
#CELERY_AMQP_TASK_RESULT_EXPIRES = 1000 
#CELERY_RESULT_SERIALIZER = 'json'


CELERY_TIMEZONE = TIME_ZONE
CELERYD_PREFETCH_MULTIPLIER = dqms_settings.CELERYD_PREFETCH_MULTIPLIER
CELERY_DEFAULT_QUEUE = dqms_settings.CELERY_DEFAULT_QUEUE
CELERY_DEFAULT_EXCHANGE_TYPE = dqms_settings.CELERY_DEFAULT_EXCHANGE_TYPE
CELERY_DEFAULT_ROUTING_KEY = dqms_settings.CELERY_DEFAULT_ROUTING_KEY
CELERY_QUEUES = dqms_settings.CELERY_QUEUES
CELERY_ROUTES = dqms_settings.CELERY_ROUTES
CELERYD_HIJACK_ROOT_LOGGER = dqms_settings.CELERYD_HIJACK_ROOT_LOGGER
CELERY_ACKS_LATE = dqms_settings.CELERY_ACKS_LATE
CELERY_RESULT_BACKEND = 'redis://:s3cretP@ssw0rd@10.213.166.204:6379/5' #'djcelery.backends.database.DatabaseBackend'
#CELERY_REDIS_MAX_CONNECTIONS = 6
#CELERY_ALWAYS_EAGER = False

有人能帮助为什么不把结果放在队列中吗?

这是一个很常见的问题。将CELERY_ALWAYS_EAGER设置为TRUE就可以了但是,这并不是生产场景中的最佳解决方案。

相关内容

  • 没有找到相关文章

最新更新