如何選擇RabbitMQ的訊息儲存方式?

FrankYou發表於2016-03-16

RabbitMQ對於queue中的message的儲存方式有兩種方式:disc和ram。如果採用disc,則需要對exchange/queue/delivery mode都要設定成durable模式。Disc方式的好處是當RabbitMQ失效了,message仍然可以在重啟之後恢復。而使用ram方式,RabbitMQ處理message的效率要高很多,ram和disc兩種方式的效率比大概是3:1。所以如果在有其它HA手段保障的情況下,選用ram方式是可以提高訊息佇列的工作效率的。

如果使用ram方式,RabbitMQ能夠承載的訪問量則取決於可用的記憶體數了。RabbitMQ使用兩個引數來限制使用系統的記憶體,避免系統被自己獨佔。

[{rabbit, [{vm_memory_high_watermark_paging_ratio, 0.75},          {vm_memory_high_watermark, 0.4}]}].

vm_memory_high_watermark:表示RabbitMQ使用記憶體的上限為系統記憶體的40%。也可以通過absolute引數制定具體可用的記憶體數。當RabbitMQ使用記憶體超過這個限制時,RabbitMQ 將對訊息的釋出者進行限流,直到記憶體佔用回到正常值以內。

Vm_memory_high_watermark_paging_ratio:表示當RabbitMQ達到0.4*0.75=30%,系統將對queue中的內容啟用paging機制,將message等內容換頁到disk 中。

RabbitMQ的記憶體使用情況可以通過“rabbitmqctl status”或者管理外掛中的Web UI查詢。

圖片描述

各個記憶體條目的含義請參照:https://www.rabbitmq.com/memory-use.html

當訊息傳送的速率超過了RabbitMQ的處理能力時該怎麼辦?

RabbitMQ會自動減慢這個連線的速率,讓client端以為網路頻寬變小了,傳送訊息的速率會受限,從而達到流控的目的。 使用”rabbitmqctl list_connections”檢視連線,如果狀態為“flow”,則說明這個連線處於flow-control 狀態。

相關文章