使用JSON Serializer(Python Node.js)配置芹菜



我正在使用celery模块 v3.1.25 在Python中运行一个芹菜工人,以及带有node-celery NPM软件包V0的Node.js中的芹菜客户端。2.7 (不是最新(

使用python芹菜客户端发送作业时,Python芹菜工人的工作正常。

问题:使用node-celery客户端将任务发送到芹菜后端时,我们会在JS控制台中获得错误:

(stderr(芹菜应配置使用JSON Serializer

Python芹菜工人配置了:

app = Celery('tasks', 
    broker='amqp://test:test@192.168.1.26:5672//',
    backend='amqp://',
    task_serializer='json',
    include=['proj.tasks'])

node-celery客户端配置:

var celery = require('node-celery')
var client = celery.createClient({
    CELERY_BROKER_URL: 'amqp://test:test@192.168.1.26:5672//',
    CELERY_RESULT_BACKEND: 'amqp',
    CELERY_TASK_SERIALIZER: "json"
});
client.on('connect', function() {
    console.log('connected');
    client.call('proj.tasks.getPriceEstimates', [start_latitude, start_longitude],
        function(result) {
            console.log('result: ', result);
            client.end();
        })
});

这是Python芹菜工人上配置的问题吗?我们是否错过了可以将返回序列化格式更改为 json的配置参数?


更新

result_serializersaccept_content参数更新,如Chillaranand建议

from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('tasks', 
    broker='amqp://test:test@192.168.1.26:5672//',
    backend='amqp://',
    task_serializer='json',
    result_serializer='json',
    accept_content=['application/json'],
    include=['proj.tasks'])

但是node.js芹菜客户端仍然认为它不在json中,抛出相同的错误消息。

它给出了该错误,因为结果是以'application/x-python-serialize'的形式。

检查了这种情况,因为RabbitMQ管理控制台将结果显示为content_type: application/x-python-serialize


本论坛帖子说这是因为任务是在加载配置之前创建的。

这是我的文件的样子:

proj/celery.py

from __future__ import absolute_import, unicode_literals
from celery import Celery
app = Celery('tasks', 
    broker='amqp://test:test@192.168.1.26:5672//',
    backend='amqp://',
    task_serializer='json',
    result_serializer='json',
    accept_content=['application/json'],
    include=['proj.tasks'])

proj/tasks.py

from __future__ import absolute_import, unicode_literals
from .celery import app
@app.task
def myTask():
    ...
    return ...

是否有更好的方法来构建代码以确保任务之前加载配置?

配置序列化器时,您也应该指定内容类型,任务序列化器和结果序列化器。

app = Celery(
    broker='amqp://guest@localhost//',
    backend='amqp://',
    include=['proj.tasks'],
    task_serializer='json',
    result_serializer='json',
    accept_content = ['application/json'],
)

相关内容

  • 没有找到相关文章