Настройте 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'],
)