不知道如何格式化来自rabbitmq的芹菜消息

时间:2017-05-22 00:36:04

标签: python rabbitmq celery

将此作为指南: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')

我需要在这里输入的最低要求是什么: rabbitmq web interface

让它实际运行任务。

1 个答案:

答案 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')
})