【发布时间】:2023-06-20 01:37:01
【问题描述】:
我检查了RabbitMQ tutorial 的“消息持久性”部分。但它有这个注释:
将消息标记为持久性并不能完全保证消息 不会丢失。虽然它告诉 RabbitMQ 将消息保存到磁盘, 当 RabbitMQ 接受一个 消息,尚未保存。此外,RabbitMQ 不执行 fsync(2) 对于每条消息——它可能只是保存到缓存中而不是真的 写入磁盘
但是如果我需要真的持久队列怎么办?我可以使用哪些最佳实践? 例如,如果消息在 2 分钟内没有被确认,我是否应该在数据库中有“队列”并通过 cron 进行一些“重新发送”?有没有更好的解决方案?
另外,如果我的消费者在它处理消息之后和在它发送 ACK 之前崩溃了怎么办?
UPD:我的问题被标记为集群问题的“可能重复”。我不知道集群如何帮助解决这些问题。
【问题讨论】:
-
如果整个集群崩溃了怎么办?
-
可能性非常低......但是,如果您真的担心并且不需要在应用程序级别进行 ACK,您可以有自己的队列来处理以下情况那。取决于应用程序 - 可能是安装在本地 Web 服务器上的微型 Redis 实例 + python / php 通过 cron / node.js 应用程序在 RabbitMQ 再次可用后推送发送队列?
标签: rabbitmq amqp durability