【问题标题】:Serial processing in Rabbit MQ NodeJSRabbit MQ NodeJS 中的串行处理
【发布时间】:2015-01-17 11:07:48
【问题描述】:

我正在使用 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);

谢谢, 巴兰

【问题讨论】:

  • 你是如何处理这些工作的?
  • @DaveNewton 我在问题中添加了 Receiver 中使用的代码。作业在//JOB HERE 部分执行。注意:工作中没有使用回调

标签: node.js rabbitmq


【解决方案1】:

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

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

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

【讨论】:

  • 我知道 RabbitMQ 是接收和执行诸如推送通知调用之类的操作,这些操作不需要与代码中的其他逻辑一起执行。但是对于我的一个要求,我想知道是否有机会让队列进程请求一个一个..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 2018-07-30
相关资源
最近更新 更多