首页 > 解决方案 > 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 分钟?

标签: javascriptnode.jsrabbitmq

解决方案


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

它基本上允许您发布带有headers.put("x-delay", 5000);您想要的标题的消息。

但我认为你需要为此使用一个新的、专门的交易所。幸运的是args.put("x-delayed-type", "direct");,它可以是任何当前存在的交换类型(也可以是自定义类型)。

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

显然插件会持久化消息,因此如果 RabbitMQ 服务器重新启动,消息仍将被发送。


推荐阅读