RabbitMQ和延迟消息

时间:2018-11-12 14:26:08

标签: javascript node.js rabbitmq

我正在尝试RabbitMQ,并且正在学习本教程:https://www.cloudamqp.com/blog/2015-05-19-part2-2-rabbitmq-for-beginners_example-and-sample-code-node-js.html

这是接收消息时的示例:

function processMsg(msg) {
  work(msg, function(ok) {
    try {
      if (ok)
        ch.ack(msg);
      else
        ch.reject(msg, true);
    } catch (e) {
      closeOnErr(e);
    }
  });
}

是否有可能用reject而不是delay的消息将其放回队列中,以等待30分钟?

1 个答案:

答案 0 :(得分:0)

RabbitMQ有一个名为RabbitMQ Delayed Message Plugin的插件。该链接包含一个示例,因为它是RabbitMQ的博客文章。

基本上,它使您可以发布标题为headers.put("x-delay", 5000);的邮件。

但是,我认为您需要为此使用新的专业交易所。幸运的是,args.put("x-delayed-type", "direct");可以是任何现有交换类型(也可以是自定义交换类型)。

我不建议在服务器端执行此操作(node-js),因为除非将消息存储在数据库中,否则在重新启动服务器后消息将丢失。另外,您可能最终会遇到等待大量超时的情况。

显然,该插件将保留消息,因此,如果重新启动RabbitMQ服务器,该消息仍将发送。