繁体   English   中英

RabbitMQ中真正持久的队列

[英]Really durable queue in 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();

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

编辑

参阅@old_sound所建议的“发布者确认” https://www.rabbitmq.com/confirms.html

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM