将此作为指南:http://docs.celeryproject.org/en/latest/internals/protocol.html#definition
我正在尝试向我的芹菜程序发送消息,但我不知道如何格式化消息。无论我尝试什么,我都会从芹菜中得到KeyError: 'chord'
或ValueError('not enough values to unpack (expected 3, got 0)'
的神秘错误。我在哪里可以找到有关如何格式化这些消息的信息。我只是想通过rabbitmq网络界面来实现这一目标。
这是我的芹菜应用程序的样子:
from celery import Celery
import time
app = Celery('tasks', backend='rpc://', broker='pyamqp://ycunrxpq:nU31gS9yTlbFNC0vXJFpU7P9GxmzHkk8@orangutan.rmq.cloudamqp.com/ycunrxpq')
@app.task
def random_task():
print('this task is random')
让它实际运行任务。
答案 0 :(得分:0)
我不知道是否对你有用,但我记得我有类似的问题。
只需传递' content_type',' content_encoding'在物业和' eta'和'任务名称' (没有任务。)在标题中。
另外,我记得kwargs和args是强制性的。
这是我的任务的一个例子
app = Celery('tasks', broker='pyamqp://logstash:logstash@rabbitmq.local:5672')
app.conf.task_queues = (
Queue('logstash_events', Exchange('logstash_events'), routing_key='logstash_events'),
)
app.conf.task_default_queue = 'logstash_events'
app.conf.task_default_exchange_type = 'direct'
app.conf.task_default_routing_key = 'logstash_events'
@app.task(serializer='json', name='process_next_task', bind=True)
def process_next_task(self,*args,**kwargs):
self.message = kwargs.get('message',"null")
self.geodata = kwargs.get('geodata',"null")
print(self.message)
print(self.geodata)
这些是我从Logstash传递的参数(Logstash中的Ruby),但我认为是相同的。
event.set('task', 'process_next_task')
event.set('lang', 'py')
event.set('origin', '@logstash')
event.set('id', event.get('fingerprint'))
event.set('args', {:empty => 'null'})
event.set('kwargs', {
:message => {
:data => event.get('data'),
:event_type => event.get('event_type'),
},
:geodata => event.get('geoip')
})