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

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

相关推荐

    activemq_activemq_doublezoo_源码

    在“activemq_activemq_doublezoo_源码”这个主题中,我们主要关注两个关键概念:ActiveMQ的生产者和消费者API,以及ActiveMQ与Spring框架的整合。 1. **ActiveMQ生产者API**: 生产者是向消息队列发布消息的组件...

    Spring-ActiveMQ.rar_Spring Activemq_activemq_activemq spring

    在IT领域,消息队列(Message Broker)是一个重要的组件,它允许分布式系统中的不同部分通过异步通信来解耦和协调工作。ActiveMQ是Apache软件基金会的一个开源项目,它是Java消息服务(JMS)的一个实现,广泛应用于...

    ActiveMQ_in_Action_中文

    JMSSession是生产和消费消息的一个单线程上下文,会话用于创建消息生产者(producer)、消息消费者(consumer)和消息(message)等。会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个...

    message_system_test_report.rar_ActiveMQ java_activemq_httpsqs_me

    首先,ActiveMQ是Apache软件基金会开发的一款开源消息代理,它是基于Java Message Service (JMS) 规范的。ActiveMQ支持多种协议,如OpenWire、AMQP、STOMP、MQTT和XMPP,使其能与各种编程语言和框架集成。在安装部署...

    activeMQ_spring_Demo.zip_DEMO_activemq_activemq spring_rowbv3

    《ActiveMQ与Spring整合实战教程》 在Java企业级应用中,消息中间件扮演着至关重要的角色,它能够实现应用间的解耦,提高系统的可扩展性和可靠性。ActiveMQ作为Apache基金会的一个开源项目,是Java消息服务(JMS)...

    activemq-jmdns_1.0-4.1.2.jar.zip

    ActiveMQ是Apache软件基金会开发的一个开源消息中间件,它遵循开放标准,如AMQP(Advanced Message Queuing Protocol)和JMS(Java Message Service),用于在分布式环境中提供高效率的消息传递服务。ActiveMQ允许...

    activemq-jmdns_1.0-5.4.0-sources.jar

    标签:activemq-jmdns_1.0-5.4.0-sources.jar,activemq,jmdns_1.0,5.4.0,sources,jar包下载,依赖包

    activemq-jmdns_1.0-5.4.0-javadoc.jar

    标签:activemq-jmdns_1.0-5.4.0-javadoc.jar,activemq,jmdns_1.0,5.4.0,javadoc,jar包下载,依赖包

    activemq-jmdns_1.0-4.1.2.jar

    标签:activemq-jmdns_1.0-4.1.2.jar,activemq,jmdns_1.0,4.1.2,jar包下载,依赖包

    activemq-jmdns_1.0-5.5.1.jar

    标签:activemq-jmdns_1.0-5.5.1.jar,activemq,jmdns_1.0,5.5.1,jar包下载,依赖包

    activemq-jmdns_1.0-5.3.2.jar

    标签:activemq-jmdns_1.0-5.3.2.jar,activemq,jmdns_1.0,5.3.2,jar包下载,依赖包

    activemq-jmdns_1.0-5.4.1.jar

    标签:activemq-jmdns_1.0-5.4.1.jar,activemq,jmdns_1.0,5.4.1,jar包下载,依赖包

    activemq-jmdns_1.0-5.4.0.jar

    标签:activemq-jmdns_1.0-5.4.0.jar,activemq,jmdns_1.0,5.4.0,jar包下载,依赖包

    activemq-jmdns_1.0-5.4.3.jar

    标签:activemq-jmdns_1.0-5.4.3.jar,activemq,jmdns_1.0,5.4.3,jar包下载,依赖包

    activemq-jmdns_1.0-5.6.0.jar

    标签:activemq-jmdns_1.0-5.6.0.jar,activemq,jmdns_1.0,5.6.0,jar包下载,依赖包

    activemq-jmdns_1.0-5.3.1.jar

    标签:activemq-jmdns_1.0-5.3.1.jar,activemq,jmdns_1.0,5.3.1,jar包下载,依赖包

    activemq-jmdns_1.0-5.1.0.jar

    标签:activemq-jmdns_1.0-5.1.0.jar,activemq,jmdns_1.0,5.1.0,jar包下载,依赖包

    activemq-jmdns_1.0-5.4.2.jar

    标签:activemq-jmdns_1.0-5.4.2.jar,activemq,jmdns_1.0,5.4.2,jar包下载,依赖包

Global site tag (gtag.js) - Google Analytics