`
netcomm
  • 浏览: 139973 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

activeMQ笑脸计划_message cursor

阅读更多

因群里的“追风”问message cursor到底是有什么用,以及怎么用,我答应他出篇源码分析文档,现在有点时间,就把message cursor分析一下。

在分析的过程种发现,如果不从源码分析,只是从已有的用户使用文档中,确实没法用好message cursor

activeMQmessage cursor分为3

l         Store-based

l         VM

l         File-based

下面我具体分析每种message cursor的实现:

Store-based

 

 

                           图一:Store-based实现原理图

     消息接收后,首先完成消息存储的工作,如(1)所示,然后会判断是否有空闲的内存可用,如果有的话,就走路径1,直接把消息存放在内存中的LinkedHashMap,如果没有可用内存,则走路径2,当需要消息的时候,直接从消息存储的介质里每次读取一批消息,然后存入LinkedHashMap

File



 

 

                            图二:file实现原理图

     消息接收后,首先完成消息存储的工作,如(1)所示,然后会判断是否有空闲的内存可用,如果有的话,就走路径1,直接把消息存放在内存中的LinkedList,如果没有可用内存,则走路径2,把消息写入临时文件中,当需要消息的时候,直接从临时文件中读写一批,然后送入LinkedList

VM



 

 

                            图三:VM实现原理图

     消息接收后,首先完成消息存储的工作,如(1)所示,然后直接把消息存放在内存中的LinkedList

 

 

3种消息cursor的比较

消息cursor类型

性能

稳定性

最佳使用场景

Store-based

当内存不够时,需要进行1次消息存储操作,性能在3种方式中居中

最好

activeMQ默认使用该cursor,因为它能满足大部分场景需要

File

当内存不够时,需要进行2次消息存储操作,并且在删除消息的时候也就相应的要删除2次,性能在3种方式中最差

居中

主要用在当消息存储慢(如消息是放在数据库里),并且消费者相对快的情况下

VM

在内存够的情况下,3message cursor性能一样

最容易出现内存溢出的问题

很快,但不能处理慢消息消费者

 

 

下面是“追风”提供的message cursor的测试记录,特此感谢参与。

基于存储的消息指针_测试结果

测试方法

结果说明

是否通过

备注

500queue 持久化消息/非持久化消息 的发送客户端,一直发送,不接收,因为是默认的,所以不用在服务器端配置。

1.对于非持久化消息,一定数量之后,也会产生临时文件。

2.对于持久化的消息,则适用该方式的消息指针,直到达到磁盘空间的设置上限。

 

 

 

 

 

 

VM消息指针_测试结果

测试方法

结果说明

是否通过

备注

500queue 持久化消息/非持久化消息 的发送客户端,一直发送,在Activemq.xml配置文件中配置:

<pendingQueuePolicy>

<vmQueueCursor />

</pendingQueuePolicy>

队列中存储到一定量消息的时候,broker不再接收生产者发送过来的消息,56W左右,broker也不报错,客户端也不报错。

若设置producerflowControl=false,则消息数量持续增长,直到broker报错:

WARN  AMQMessageStore                - Message could not be added to long term store: Java heap space

java.lang.OutOfMemoryError: Java heap space

 

 

 

 

 

基于文件的消息指针_测试结果

测试方法

结果说明

是否通过

备注

500queue 持久化消息/非持久化消息 的发送客户端,一直发送,在Activemq.xml配置文件中配置:

<pendingQueuePolicy>

<fileQueueCursor />

</pendingQueuePolicy>

一段时间之后,broker打印出一信息:

INFO MonetStore                     - Monet Store using

data directory C:\Activemq

5.1\bin\..

\data\localhost\tmp_storage

临时文件被放置在tmp_storage目录下。

 

 

 

 

 

 

 (有关activeMQ的相关问题,请加入我们,联系方式QQ:1054618780,email:yunweitec@yahoo.cn)

  • 大小: 13.1 KB
  • 大小: 12.5 KB
  • 大小: 9.3 KB
分享到:
评论
4 楼 horacemolin 2015-06-30  
楼主厉害,正在研究这个~
3 楼 DEMONU 2015-06-08  
哎呦,终于找到了。 
2 楼 moqiaoxp 2013-07-23  
群号多少,我最近也在研究ActiveMQ
1 楼 jasin2008 2009-09-23  
lz有没有兴趣研究下HornetQ

相关推荐

Global site tag (gtag.js) - Google Analytics