Rabbit MQ NodeJS中的串行处理

时间:2015-01-17 11:07:48

标签: node.js rabbitmq

我正在使用RabbitMQ来处理我项目中的一些工作。 目前,如果我发送5个工作,请说

Job1
Job2
Job3
Job4
Job5

所有作业都会传递到队列,但如果Job1需要5秒钟才能完成而Job2需要2秒才能完成,执行顺序就会变为 像

Job5
Job1 etc.,

我有没有办法让它能让所有这些工作在RabbitMQ接收器中完成前一个工作后完成(如Job1,Job2,Job3,Job4,Job5等执行流程)?

作业执行(根据Dave的要求)

var amqp = require('amqplib');

amqp.connect('amqp://localhost').then(function(conn) {
  process.once('SIGINT', function() { conn.close(); });
  return conn.createChannel().then(function(ch) {

    var ok = ch.assertQueue('hello', {durable: false});

    ok = ok.then(function(_qok) {
      return ch.consume('hello', function(msg) {

        //JOB HERE

      }, {noAck: true});

    });

    return ok.then(function(_consumeOk) {
      console.log(' [*] Waiting for messages. To exit press CTRL+C');
    });
  });
}).then(null, console.warn);

感谢, 巴兰

1 个答案:

答案 0 :(得分:0)

我认为您将RabbitMQ服务器与应用程序逻辑混淆。简短的回答是,不能保证消息处理的顺序。

为了解决您的澄清问题,队列不关心您的应用程序如何从中获取。该队列仅向您的应用程序提供消息。由您决定如何处理(例如串行,并行等)。我认为,如果您计划进行串行处理,那么使用消息队列没有多大意义,因为您可以获得没有任何好处的消息服务器的所有缺点。也许您可以更多地描述您的应用程序?

有关其他详细信息,请参阅message order of delivery处的其他答案。