1. 程式人生 > >談談Activemq的儲存機制

談談Activemq的儲存機制

mq的訊息儲存有三個地方,分別是:mq代理的記憶體空間、持久儲存區、臨時儲存區。對應引數為:


  <systemUsage>
    <systemUsage>
        <memoryUsage>
            <memoryUsage limit="2gb"/>
        </memoryUsage>
        <storeUsage>
            <storeUsage limit="100 gb"/>
        </storeUsage>
        <tempUsage>
            <tempUsage limit="50 gb"/>
        </tempUsage>
    </systemUsage>
</systemUsage> 


其中,memoryUsage是mq的訊息儲存計數,它統計了mq中訊息佔用jvm記憶體情況。storeUsage是當訊息設定為persistent模式時的儲存空間。
tempUsage是non persistent時的訊息儲存空間。訊息進入mq後,首先會佔用memoryUsage,persistent模式下,訊息總是會被另外儲存於指定介質(預設KahaDB),如果non persistent,當訊息佔用記憶體量超過memoryUsage的70%(預設值,可調整),則訊息會被交換到臨時區域(如果預設FileCursor,則會以檔案形式儲存於磁碟空間),這個交換過程會很慢,所以如果這種情況頻繁存在,設定PFC很有必要了。如果訊息的消費能力有限,tempUsage可以設定大一些,不然很容易出現tempusage超限情況。還有一點要注意,tempusage不能小於32m,而且最好還要大於memoryUsage,不然對於情況1,轉存單個檔案預設大小32M,寫檔案還未完成tempusage已經超限了,情況2也可能會出現記憶體的訊息還未完全交換到temp區,tempusage已經超限的情況。