我正在将RabbitMQ评估为我的Web应用程序的异步中间层。我担心的是它会将收到的每条消息写入磁盘,作为一致性模型。是真的还是优化内存中的队列并不时将其序列化为磁盘?
答案 0 :(得分:5)
您可以将消息标记为持久性或瞬态,并将队列配置为持久或不持久。如果消息是暂时的,或者被发送到非持久队列,则根本不需要将其写入磁盘。
对于发送到持久队列的持久性消息,如果无法立即传递,则只会将消息写入磁盘。至少,这是我从publisher confirms的工作方式推断出来的:一个确认表明RabbitMQ代理已经安全地接受了一条消息,并且当 消息是写入磁盘,或将其传递给消费者。
second part of the tutorial中还提到了:
此外,RabbitMQ不会为每条消息执行
fsync(2)
- 它可能只是保存到缓存而不是真正写入磁盘。