使用JSON序列化程序(Python+;node.js)配置芹菜
我正在运行Python中的芹菜工作程序和node.js中的芹菜客户端(不是最新版本) 当使用Python芹菜客户端发送作业时,Python芹菜工作者工作正常 问题:当使用使用JSON序列化程序(Python+;node.js)配置芹菜,python,json,node.js,celery,node-celery,Python,Json,Node.js,Celery,Node Celery,我正在运行Python中的芹菜工作程序和node.js中的芹菜客户端(不是最新版本) 当使用Python芹菜客户端发送作业时,Python芹菜工作者工作正常 问题:当使用节点芹菜客户端向芹菜后端发送任务时,JS控制台中出现错误: (STDERR)芹菜应该配置json序列化程序 Python芹菜工人配置为: app = Celery('tasks', broker='amqp://test:test@192.168.1.26:5672//', backend='amqp://',
节点芹菜
客户端向芹菜后端发送任务时,JS控制台中出现错误:
(STDERR)芹菜应该配置json序列化程序
Python芹菜工人配置为:
app = Celery('tasks',
broker='amqp://test:test@192.168.1.26:5672//',
backend='amqp://',
task_serializer='json',
include=['proj.tasks'])
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();
})
});
节点芹菜
客户端配置有:
app = Celery('tasks',
broker='amqp://test:test@192.168.1.26:5672//',
backend='amqp://',
task_serializer='json',
include=['proj.tasks'])
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
的配置参数
更新 使用Chillarand建议的
result\u序列化程序
和accept\u content
参数更新
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
中,抛出相同的错误消息
它给出了这个错误,因为
选中此选项,因为RabbitMQ管理控制台显示结果为content\u type:application/x-python-serialize
这是因为任务是在加载配置之前创建的 我的文件是这样的: proj/芹菜.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'])
from __future__ import absolute_import, unicode_literals
from .celery import app
@app.task
def myTask():
...
return ...
proj/tasks.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'])
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'],
)
我为Python芹菜工人做了建议的更改。但是节点客户端在接收结果时仍然给出相同的错误。我相信这会产生错误,因为。要将其切换到
json
?对于芹菜节点应用程序,您是否设置了cellery\u ACCEPT\u CONTENT=['json']、cellery\u TASK\u SERIALIZER='json',cellery\u RESULT\u SERIALIZER='json'
?您是否设法解决了问题?