RabbitMQ中真正持久的队列

时间:2015-10-28 15:58:18

标签: rabbitmq amqp durability

我检查了RabbitMQ tutorial的“消息持久性”部分。但它有这个说明:

  

将消息标记为持久性并不能完全保证消息   不会丢失。虽然它告诉RabbitMQ将消息保存到磁盘,   RabbitMQ接受了一个短暂的时间窗口   消息,尚未保存。另外,RabbitMQ不做fsync(2)   对于每条消息 - 它可能只是保存到缓存而不是真的   写入磁盘

但是如果我需要真的持久队列怎么办?我可以使用哪种最佳做法? 我应该在数据库中有“队列”而cron有一些“resender”,例如,如果消息在2分钟内未被确认?有没有更好的解决方案?

此外,如果我的消费者在处理完消息之后崩溃并且在发送ACK之前会崩溃怎么办?

UPD:我的问题被标记为群集问题的“可能重复”。我不知道集群如何帮助解决这些问题。

2 个答案:

答案 0 :(得分:2)

请阅读here关于使用Tx保证交付

的信息

发布商会使用以下内容:

ch.txSelect();
ch.basicPublish("", QUEUE_NAME,MessageProperties.PERSISTENT_BASIC,"nop".getBytes());
ch.txCommit();

注意:这可能会导致您的性能应用程序失效!

修改

另请阅读"出版商确认" {@ 3}}由@old_sound提出

答案 1 :(得分:0)

查看发布商确认,以解决RabbitMQ是否持久保存/复制您的消息的问题:https://www.rabbitmq.com/confirms.html