Настройте Celery с помощью JSON Serializer (Python + node.js)

Я управляю работником Celery в Python с celery модуль v3.1.25 и клиент Celery в node.js с node-celery Пакет npm v0.2.7 (не последний).

Работник Python Celery отлично работает при отправке работы с помощью клиента Python Celery.

Проблема: при использовании node-celery клиент для отправки задачи в бэкэнд Celery, мы получаем ошибку в консоли JS:

(STDERR) Сельдерей должен быть настроен с помощью json сериализатора

Рабочий Python Celery настроен с:

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 Celery? Мы пропустили параметр конфигурации, который может изменить формат возвращаемой сериализации на json?


Обновить

Обновлено с result_serializers а также accept_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'])

Но клиент No.js Celery все еще думает, что его нет в json, выбрасывая то же сообщение об ошибке.

Это дает эту ошибку, потому что результаты были в форме 'application/x-python-serialize',

Проверено, чтобы это имело место, поскольку консоль управления RabbitMQ показывает результаты, которые должны быть content_type: application/x-python-serialize


В этом сообщении на форуме говорится, что это потому, что задачи были созданы до загрузки конфигов.

Вот как выглядят мои файлы:

проектируемый /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'])

проектируемый /tasks.py

from __future__ import absolute_import, unicode_literals
from .celery import app

@app.task
def myTask():
    ...
    return ...

Есть ли лучший способ структурировать код, чтобы убедиться, что конфиги загружаются перед задачами?

1 ответ

При настройке сериализатора вы должны также указать тип контента, сериализатор задач и сериализатор результатов.

app = Celery(
    broker='amqp://guest@localhost//',
    backend='amqp://',
    include=['proj.tasks'],

    task_serializer='json',
    result_serializer='json',
    accept_content = ['application/json'],
)
Другие вопросы по тегам