Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JSON序列化程序(Python+;node.js)配置芹菜_Python_Json_Node.js_Celery_Node Celery - Fatal编程技术网

使用JSON序列化程序(Python+;node.js)配置芹菜

使用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://',

我正在运行Python中的芹菜工作程序和node.js中的芹菜客户端(不是最新版本)

当使用Python芹菜客户端发送作业时,Python芹菜工作者工作正常

问题:当使用
节点芹菜
客户端向芹菜后端发送任务时,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'
?您是否设法解决了问题?