我检查了RabbitMQ 教程的“消息持久性”部分。但它有这个注释:
将消息标记为持久性并不能完全保证消息不会丢失。虽然它告诉 RabbitMQ 将消息保存到磁盘,但是当 RabbitMQ 接受消息并且还没有保存它时,仍然有很短的时间窗口。此外,RabbitMQ 不会对每条消息都执行 fsync(2) ——它可能只是保存到缓存中而不是真正写入磁盘
但是如果我需要真正持久的队列怎么办?我可以使用哪些最佳实践?例如,如果消息在 2 分钟内没有被确认,我是否应该在数据库中有“队列”并通过 cron 进行一些“重新发送”?有没有更好的解决方案?
另外,如果我的消费者在处理完消息之后发送 ACK 之前崩溃了怎么办?
UPD:我的问题被标记为聚类问题的“可能重复”。我不知道集群如何帮助解决这些问题。