我正在尝试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分钟?
答案 0 :(得分:0)
RabbitMQ有一个名为RabbitMQ Delayed Message Plugin的插件。该链接包含一个示例,因为它是RabbitMQ的博客文章。
基本上,它使您可以发布标题为headers.put("x-delay", 5000);
的邮件。
但是,我认为您需要为此使用新的专业交易所。幸运的是,args.put("x-delayed-type", "direct");
可以是任何现有交换类型(也可以是自定义交换类型)。
我不建议在服务器端执行此操作(node-js),因为除非将消息存储在数据库中,否则在重新启动服务器后消息将丢失。另外,您可能最终会遇到等待大量超时的情况。
显然,该插件将保留消息,因此,如果重新启动RabbitMQ服务器,该消息仍将发送。