RabbitMQ中真正持久的队列



我检查了RabbitMQ教程的"消息持久性"部分。但它有这样的注释:

将消息标记为持久消息并不能完全保证消息不会迷路。尽管它告诉RabbitMQ将消息保存到磁盘,RabbitMQ接受消息,但尚未保存。此外,RabbitMQ不执行fsync(2)对于每条消息,它可能只是保存到缓存中,而不是真正保存写入磁盘

但是,如果我真的需要持久队列,该怎么办?我可以使用哪些最佳实践?例如,如果消息在2分钟内未得到确认,我应该在数据库中设置"队列",并通过cron设置一些"重发器"吗?有更好的解决方案吗?

另外,如果我的消费者在处理消息后崩溃,而在发送ACK之前,该怎么办?

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

请阅读此处关于Tx的保证交付

出版商会使用类似的东西:

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

注意:这可能会扼杀您的性能应用程序!

编辑

另请阅读"发布者确认"https://www.rabbitmq.com/confirms.html如@old_sound 所建议的

看看Publisher Confirms,它是为了解决了解RabbitMQ是否已持久化/复制您的消息的问题而制作的:https://www.rabbitmq.com/confirms.html

相关内容

  • 没有找到相关文章

最新更新