如何限制rabbitmq中消费消息的数量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何限制rabbitmq中消费消息的数量?相关的知识,希望对你有一定的参考价值。

我在rabbitmq项目中与amqplibnode合作。

我使用队列在服务之间传递作业消息。 其中一个服务使用这些消息,执行某些过程并将结果返回到另一个队列。

有时队列会保存大量消息,并且服务会尝试一次性消耗它们,从而导致进程(服务)崩溃。

如何限制频道/服务可以处理的消息数量? 我想到了一个自定义解决方案,持有全球限制,但我宁愿将它作为最后的手段......

答案

从您的问题来看,这并不完全清楚,但似乎您希望限制服务消耗消息的方式,而不是队列保留的消息数量。如果这种理解是正确的,那么你需要的是prefetch_count。更多文档:https://www.rabbitmq.com/consumer-prefetch.html

var amqp = require('amqplib/callback_api');

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

    ch.assertQueue(q, durable: true);
    ch.prefetch(1);                // THIS SHOULD SOLVE YOUR PROBLEM
    console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q);
    ch.consume(q, function(msg) 
      var secs = msg.content.toString().split('.').length - 1;

      console.log(" [x] Received %s", msg.content.toString());
      setTimeout(function() 
        console.log(" [x] Done");
        ch.ack(msg);
      , secs * 1000);
    );
  );
);

代码来源:https://www.rabbitmq.com/tutorials/tutorial-two-javascript.html

以上是关于如何限制rabbitmq中消费消息的数量?的主要内容,如果未能解决你的问题,请参考以下文章

java如何获取rabbitmq队列中消息数量

.Net Core&RabbitMQ限制循环消费

批量消费消息 - RabbitMQ

使用Java模拟消费者是如何消费rabbitMQ消息队列中的消息的

移动云消息队列RabbitMQ对资源创建数量有限制吗?

rabbitMQ使用