当前位置: 首页 > 知识库问答 >
问题:

如何在NodeJ上仅使用来自rabbit mq的一条消息

荆钱明
2023-03-14

我使用amqp.node库集成Rabbitmq到我的系统。

但是在消费者中,我想一次只处理一条消息,然后确认消息,然后从队列中消费下一条消息。

目前的代码是:

// Consumer
open.then(function(conn) {
  var ok = conn.createChannel();
  ok = ok.then(function(ch) {
    ch.assertQueue(q);
    ch.consume(q, function(msg) {
      if (msg !== null) {
        othermodule.processMessage(msg, function(error, response){
          console.log(msg.content.toString());
          ch.ack(msg);
        });
      }
    });
  });
  return ok;
}).then(null, console.warn);

ch.consume将一次处理通道中的所有消息,模块的功能在这里调用,其他模块不会在同一时间线执行。

我想等待othermodule函数完成,然后再使用队列中的下一条消息。

共有3个答案

郁光熙
2023-03-14

您需要设置一个预取值,如本示例所示:

https://github.com/squaremo/amqp.node/blob/master/examples/tutorials/rpc_server.js#L22

虞唯
2023-03-14

创建模型时,需要在模型上设置QOS。下面是我们在C#中的实现方式:

    var _model = rabbitConnection.CreateModel();
    // Configure the Quality of service for the model. Below is how what each setting means.
    // BasicQos(0="Dont send me a new message untill I’ve finshed",  _fetchSize = "Send me N messages at a time", false ="Apply to this Model only")
    _model.BasicQos(0, _fetchSize, false);
    var consumerTag = _model.BasicConsume(rabbitQueue.QueueName, false, _consumerName, queueingConsumer);
邬宜然
2023-03-14

目前(2018年),我认为RabbitMQ团队可以选择这样做:

https://www.rabbitmq.com/tutorials/tutorial-two-javascript.html

ch.prefetch(1);

为了克服这个缺点,我们可以使用值为1的预取方法。这告诉RabbitMQ一次不要向工作进程发送多条消息。或者,换句话说,在工作进程处理并确认前一条消息之前,不要向其发送新消息。相反,它将把它分派给下一个还不忙的工作人员。

 类似资料:
  • 我试图在我的邮件中添加自定义标题,所以每当异常发生并最终出现在死信队列中时,我都可以看到异常是什么。然而,我所有的尝试都失败了。 使用。setHeader() 在outMessage上设置标题 正在设置exchange的属性 不允许将异常设置为有效负载中的属性。 RABBITMQ字符串:

  • 本文向大家介绍Python如何使用RabbitMQ的消息,包括了Python如何使用RabbitMQ的消息的使用技巧和注意事项,需要的朋友参考一下 示例 从导入库开始。 使用消息时,我们首先需要定义一个函数来处理传入的消息。这可以是任何可调用的函数,并且必须采用一个消息对象或一个消息元组(取决于中to_tuple定义的参数start_consuming)。 除了处理传入消息中的数据外,我们还必须确

  • 我希望对RabbitMQ中的队列有这样的约束: 编辑(澄清):将有许多消费者都试图从所有队列中获取工作,由于他们无法从一个队列中获取工作,该队列中处理的事件未被加密,所以有序处理将被维护。

  • null 当应用程序正在消费消息时,但随后consumeEnabled变成false的情况就没有必要考虑了。 请定义用Spring Kafka和\或Kafka Java客户机实现决策的最佳方式

  • 我有一个Java程序,它向RabbitMQ发送消息。我只知道交易所的名字。没有队列、绑定等。 我的问题是:我如何才能看到程序是否成功发送这些,只知道交换名称? 谢谢 问候,塞班

  • 我是新的RabbitMQ,我有点迷失在留档。 目前,例如,我正在尝试构建一个侦听队列的小型邮件服务,但我有点卡在我应该在哪里放置我的服务具有的参数(目的地、主题...... 我应该将它们放在某种编码格式(json)中,放在我的消息中,还是应该使用头结构,如下例所示: 使用标头是否提供额外的好处?例如,是否可以过滤发送到特定目的地的消息?