activemq 三種索引的使用分析

activemq有三種索引系統默認的是Store-based 參考文檔 http://activemq.apache.org/message-cursors.html

第一種索引Store-based


消息接收後,首先完成消息存儲的工作,判斷是否有空閒的內存可用,如果有的話,直接進入DisPatchQueue,如果沒有可用內存,維護一個指針,當需要消息的時候,直接從消息存儲的介質裏每次讀取一批消息,然後存入DisPatchQueue(此消息存儲的大小取決於storeUsage+temUsage設置的大小)速度適中

第二種索引 VM Cursor

 

<destinationPolicy>
    <policyMap>
      <policyEntries>
        <policyEntrytopic=">" producerFlowControl="true" memoryLimit="100mb">
          <pendingSubscriberPolicy>
            <vmQueueCursor/>
          </pendingSubscriberPolicy>
        </policyEntry>
      </policyEntries>
    </policyMap>
</destinationPolicy>

 

     消息接收後,首先完成消息存儲的工作,然後直接把消息存放在內存中的DisPatchQueue(此消息存儲的大小取決於memoryLimit設置的大小,沒有設置就是memoryLimit的大小,也就是 jvm的70%)。速度最快

第三種索引 File based Cursor

<destinationPolicy>
    <policyMap>
      <policyEntries>
        <policyEntrytopic=">" producerFlowControl="true" memoryLimit="100mb">
          <pendingSubscriberPolicy>
            <fileQueueCursor/>
          </pendingSubscriberPolicy>
        </policyEntry>
      </policyEntries>
    </policyMap>
</destinationPolicy>


消息接收後,首先完成消息存儲的工作是否有空閒的內存可用,如果有的話,消息直接進入DisPatchQueue,如果沒有可用內存,把消息寫入臨時文件中,當需要消息的時候,直接從臨時文件中讀寫一批,然後送入DisPatchQueue(此消息存儲的大小取決如tempUsage的大小)速度最慢,慢消費者可以採用

測試結果(已下測試消息內容都是2KB,message3KB)


消息cursor類型

性能

穩定性

最佳使用場景

Store-based

當內存不夠時,需要進行1次消息存儲操作,性能在3種方式中居中

最好(storeUsage+temUsage使用完後假死)(12G保存3.5百萬)

activeMQ默認使用該cursor,因爲它能滿足大部分場景需要

File

當內存不夠時,需要進行2次消息存儲操作,並且在刪除消息的時候也就相應的要刪除2次,性能在3種方式中最差

居中(當tempUsage滿後假死


主要用在當消息存儲慢(如消息是放在數據庫裏),並且消費者相對快的情況下

VM

在內存夠的情況下,3種message cursor性能一樣

如果不對隊列進行內存限制,消息在內存中消耗完jvm內存後假死(對隊列進行限制後不影響其他隊列

1G內存 248142個消息

很快,適合消費慢需要抑制消息產生的場景,以及消費快的場景




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章