2017-10-19 148 views
1

我有一個要求,即永遠不應將消息寫入磁盤。 RabbitMQ文檔聲明如下:防止RabbitMQ將消息寫入磁盤

持久性和瞬態消息都可寫入磁盤。持久性消息一旦到達隊列就會被寫入磁盤,而瞬態消息只會寫入磁盤,以便在內存壓力下將其從內存中逐出。

這對於「在內存壓力下」的含義有點模糊。有沒有辦法確保瞬態消息永遠不會寫入磁盤?如果涉及到它,如果在這種情況下無法傳遞信息,則可以丟失信息。

回答

1

如果服務器處於高內存壓力下,即RAM的使用率很高,則瞬態消息只能刷新到磁盤。 (例如,如果排隊消息的數量迅速增加,就會發生這種情況。)發生這種情況時,RabbitMQ將開始將消息刷新(分頁)到磁盤以釋放RAM - 發生這種情況時,排隊速度將會惡化。來源here

根據這個線索:https://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-May/027161.html它看起來像您可以設置vm_memory_high_watermark到一個非常高的價值。通過這樣做,RabbitMQ將在OOM有機會寫入磁盤之前被OOM殺死,因爲RabbitMQ的行爲好像有很多可用的內存,而沒有。

+0

感謝您的聯繫。雖然我看不出最佳解決方案(vm_memory_high_watermark選項可以完成我認爲的工作,但需要進行崩潰恢復)。但是線程還談到了一個我之前沒有想過的RAM磁盤,值得研究,所以非常感謝! – Mikko