我要求永远不要将消息写入磁盘。 RabbitMQ文档说明了以下内容:
持久性和瞬态消息都可以写入磁盘。持久性消息一到达队列就会写入磁盘,而瞬态消息只会写入磁盘,以便在内存压力下从内存中逐出。
在内存压力下,它有点含糊不清。手段。有没有办法确保瞬态消息永远不会写入磁盘?如果涉及到它,如果在这种情况下无法传递,则可以丢失该消息。
答案 0 :(得分:1)
如果服务器处于高内存压力,即RAM使用率很高,则只会将瞬态消息刷新到磁盘。 (例如,如果排队的消息数量迅速增加,就会发生这种情况。)当发生这种情况时,RabbitMQ将开始刷新(页面输出)消息到磁盘以释放RAM - 当发生这种情况时,排队速度将会恶化。来源here。
根据这个帖子:https://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-May/027161.html看起来你可以将 vm_memory_high_watermark 设置为一个非常高的值。通过这样做,RabbitMQ将在它有机会写入磁盘之前被OOM杀死,因为RabbitMQ的行为就好像它有大量可用内存,而它没有。