精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2009-09-17
最后修改:2010-09-28
因群里的“追风”问message cursor到底是有什么用,以及怎么用,我答应他出篇源码分析文档,现在有点时间,就把message cursor分析一下。 在分析的过程种发现,如果不从源码分析,只是从已有的用户使用文档中,确实没法用好message cursor。 activeMQ的message 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的比较
下面是“追风”提供的message cursor的测试记录,特此感谢参与。 基于存储的消息指针_测试结果
VM消息指针_测试结果
基于文件的消息指针_测试结果
(有关activeMQ的相关问题,请加入我们,联系方式QQ:1054618780,email:yunweitec@yahoo.cn) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
发表时间:2009-09-23
lz有没有兴趣研究下HornetQ
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
浏览 2699 次