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