2016-10-12 2 views
0

나는 과 RabbitMQ 브로커를 사용하여 Django 프로젝트를 보유하고 있습니다. 그리고 지금은 NodeJS 서버에서 django (샐러리) 작업을 호출하고 싶습니다.셀러리 (Django) + RabbitMQ + nodejs 서버 교환 데이터

NodeJSamqplib을 사용하고 있습니다.

amqp.connect('amqp://localhost', function(err, conn) { 
    conn.createChannel(function(err, ch) { 
    var q = 'celery'; 

    ch.assertQueue(q, {durable: true}); 
    ch.sendToQueue(q, new Buffer('What should I write here?')); 
    }); 
}); 

내 질문은 무엇을 사용 형식 셀러리이다 : 어느 날 RabbitMQ에 작업을 보낼 수있다? 샐러리 작업자를 호출하려면 Buffer에 무엇을 써야합니까? 내 CELERY_ROUTES (장고 설정)에서 예를 들어

, 나는 blabla.tasks.add 있습니다

CELERY_ROUTES = { 
    ... 
    'blabla.tasks.add': 'high-priority', 
} 

방법이 blabla.tasks.add 함수를 호출하는? Received and deleted unknown message. Wrong destination?!?

답변

0

내가 여기 솔루션 http://docs.celeryproject.org/en/latest/internals/protocol.html을 발견 :

나는 나에게 오류를주는 여러 가지 있지만, 셀러리 노동자를 시도했습니다.

예 메시지 형식은 다음과 같습니다

{ "id": "4cc7438e-afd4-4f8f-a2f3-f46567e7ca77", "task": "celery.task.PingTask", "args": [], "kwargs": {}, "retries": 0, "eta": "2009-11-17T12:30:56.527191" }

그래서 코드는 다음과 같아야합니다

amqp.connect('amqp://localhost', function(err, conn) { 
    conn.createChannel(function(err, ch) { 
    var q = 'celery'; 

    ch.assertQueue(q, {durable: true}); 
    ch.sendToQueue(q, new Buffer('{"id": "this-is-soo-unique-id", "task": "blabla.tasks.add", "args": [1, 2], "kwargs": {}, "retries": 0}'), { 
     contentType: 'application/json', 
     contentEncoding: 'utf-8', 
    }); 
    }); 
});