activemq 三种索引的使用分析

本文详细介绍了ActiveMQ中的三种索引系统:Store-based、VMCursor及FilebasedCursor的特点、配置方法及其适用场景。Store-based为默认配置,适用于大多数场景;VMCursor速度快,适合消费快速的场景;FilebasedCursor虽速度较慢,但适用于消息存储缓慢而消费者较快的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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个消息

很快,适合消费慢需要抑制消息产生的场景,以及消费快的场景




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值