Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 芹菜工人如何使用RabbitMQ的任务,但却无法发送任务?_Python_Django_Rabbitmq_Celery_Amqp - Fatal编程技术网

Python 芹菜工人如何使用RabbitMQ的任务,但却无法发送任务?

Python 芹菜工人如何使用RabbitMQ的任务,但却无法发送任务?,python,django,rabbitmq,celery,amqp,Python,Django,Rabbitmq,Celery,Amqp,我们使用Django、芹菜和RabbitMQ来处理各种自动化工人。为了监控所有这些,我们有一个兔子队列用于分析和日志记录。这意味着每个自动化任务都应该能够将任务发送到分析队列。 我们正在使用“/manage.py芹菜工人”运行工人,我们的代理连接工作正常。工人可以拿起所需的任务并完美地执行它,但在执行过程中,当涉及到 log_event.delay() 突然之间,它无法连接。通过挖掘amqp库和一些pdb.set_trace(),我们发现在任务执行期间,它试图连接到本地主机,而不是rabbit

我们使用Django、芹菜和RabbitMQ来处理各种自动化工人。为了监控所有这些,我们有一个兔子队列用于分析和日志记录。这意味着每个自动化任务都应该能够将任务发送到分析队列。 我们正在使用“/manage.py芹菜工人”运行工人,我们的代理连接工作正常。工人可以拿起所需的任务并完美地执行它,但在执行过程中,当涉及到

log_event.delay()
突然之间,它无法连接。通过挖掘amqp库和一些pdb.set_trace(),我们发现在任务执行期间,它试图连接到本地主机,而不是rabbitmq服务器。 以下是相关的代理设置:

本地_settings.py

BROKER_URL = 'amqp://guest@localhost:5672/'
celeryconfig.py

import os
from kombu import Queue
from celery import Celery
from . import local_settings


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'sample.settings.production')
app = Celery('api')

BROKER_URL = getattr(local_settings, 'BROKER_URL', 'amqp://guest@broker/')
CELERY_RESULT_BACKEND = 'amqp://'
CELERY_DEFAULT_QUEUE = 'default'

CELERY_TIMEZONE = 'Europe/London'
CELERY_ENABLE_UTC = True

CELERY_QUEUES = (
    Queue('default', routing_key='default'),
    Queue('queue1', routing_key='queue1'),
    Queue('queue2', routing_key='queue2'),
    Queue('queue3', routing_key='queue3'),
    Queue('queue4', routing_key='queue4'),
)

CELERY_ANNOTATIONS = {
    'appname.tasks.queue1_task': {'rate_limit': '200/m'},
    'appname.tasks.queue2_task': {'rate_limit': '200/m'},
    'appname.tasks.queue3_task': {'rate_limit': '200/m'},
    'appname.tasks.queue4_task': {'rate_limit': '200/m'},
}

CELERYD_CONCURRENCY = 10

CELERY_DEFAULT_EXCHANGE = 'tasks'
CELERY_DEFAULT_EXCHANGE_TYPE = 'topic'
CELERY_DEFAULT_ROUTING_KEY = 'default'


CELERY_ROUTES = {
    'appname.tasks.queue1': {
        'queue': 'queue1',
        'routing_key': 'queue1',
    },
    'appname.tasks.queue2': {
        'queue': 'queue2',
        'routing_key': 'queue2',
    },
    'appname.tasks.queue3': {
        'queue': 'queue3',
        'routing_key': 'queue3',
    },
    'appname.tasks.queue4': {
        'queue': 'queue4',
        'routing_key': 'queue4',
    },
}

CELERY_IGNORE_RESULT = True
tasks.py

from celery.task import task #We also tried shared_task, no success
@task(time_limit=120, queue="queue1")
def log_action_to_es(cls, analytic_dict):
    pass # Never gets this far
log_event.delay()在哪里?你能展示一下调用堆栈吗。您可以尝试使用app.task,而不是使用task来修饰log_action_,请参阅Where is log_event.delay()中的演示?你能展示一下调用堆栈吗。您可以尝试使用app.task,而不是使用task来装饰日志,请参阅中的演示