Celery(Django)+ RabbitMQ + nodejs服务器交换数据

时间:2016-10-12 11:40:32

标签: node.js django rabbitmq celery

我有一个Bed_Configurations bdConfig = new Bed_Configurations(); bdConfig.type = "Standard"; bdConfig.code = Common.GetStandardBedTypeMappingIDnew(rm.BedType); bdConfig.count = rm.NumOfBed; hotelrmtype.bed_configurations.Add(bdConfig); 项目使用DjangoCelery经纪人。现在我想从RabbitMQ服务器调用django(celery)任务。

在我的NodeJS我使用NodeJS。允许我将任务发送到amqplib

RabbitMQ

我的问题是芹菜使用的是什么格式?我应该怎么写Buffer来打电话给芹菜工人?

例如,在我的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?')); }); }); (django设置)中,我有CELERY_ROUTES

blabla.tasks.add

如何调用此CELERY_ROUTES = { ... 'blabla.tasks.add': 'high-priority', } 函数?

我尝试了许多方法,但是芹菜工人给了我错误:blabla.tasks.add

1 个答案:

答案 0 :(得分:1)

我在这里找到了解决方案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',
    });
  });
});