2

我正在评估 RabbitMQ 作为我的 Web 应用程序的异步中间层。我担心的是,它会将收到的每条消息都写入磁盘,作为一致性模型。这是真的还是它优化了内存中的队列并不时将其序列化到磁盘?

4

1 回答 1

5

您可以将消息标记为持久或瞬态,并将队列配置为持久或不持久。如果消息是瞬态的,或者被发送到非持久队列,则根本不需要将其写入磁盘。

对于发送到持久队列的持久消息,只有在不能立即传递的情况下才会将消息写入磁盘。至少,这是我从发布者确认工作的方式中推断出来的:确认表示消息已被 RabbitMQ 代理安全地接受,并且当消息写入磁盘传递给消费者。

本教程的第二部分还有一段旁白提到:

此外,RabbitMQ 并不fsync(2)适用于每条消息——它可能只是保存到缓存中,而不是真正写入磁盘。

于 2013-10-03T22:13:30.930 回答