我检查了RabbitMQ tutorial的“消息持久性”部分。但它有这个说明:
将消息标记为持久性并不能完全保证消息 不会丢失。虽然它告诉RabbitMQ将消息保存到磁盘, RabbitMQ接受了一个短暂的时间窗口 消息,尚未保存。另外,RabbitMQ不做fsync(2) 对于每条消息 - 它可能只是保存到缓存而不是真的 写入磁盘
但是如果我需要真的持久队列怎么办?我可以使用哪种最佳做法? 我应该在数据库中有“队列”而cron有一些“resender”,例如,如果消息在2分钟内未被确认?有没有更好的解决方案?
此外,如果我的消费者在处理完消息之后崩溃并且在发送ACK之前会崩溃怎么办?
UPD:我的问题被标记为群集问题的“可能重复”。我不知道集群如何帮助解决这些问题。
答案 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