有没有一种方法可以使用 RabbitMQ 以 100% 的交付保证来传输数据?

Is there a way to transport data with a 100% delivery guarantee using RabbitMQ?

我正在构建一个系统,我想在其中使用 RabbitMQ 作为主要的消息传递机制。

我的系统需要非常强大的消息传递保证,例如,消息必须到达目的地并得到确认, 否则我希望他们重新排队,然后重新交付。

用例维护两个系统之间的最终一致性

我还想避免在我的应用程序中管理有关消息的任何状态。

我知道发布持久消息并不能 100% 保证它已持久保存到磁盘,因为不会为每条消息调用 fsync(2)。

因此,我的问题是 - 我可以将 RabbitMQ 用作 100% 可靠* 消息传递机制吗?

我读过有关事务的信息,但除了 2011 blogpost 之外找不到任何内容,它也没有明确声明对每条消息执行 fsync(2),或者(同步) 不成功则失败。

* 我所说的可靠是指消息最终应该始终传递。可以接受重复的消息。

Can I use RabbitMQ as a 100% reliable message passing mechanism?

是,使用持久消息、发布者确认和消费者确认 - link

当您的发布者收到确认消息时,消息已写入并同步到磁盘。


注意: RabbitMQ 团队监控 the rabbitmq-users mailing list 并且有时只在 Whosebug 上回答问题。