读书人

ActiveMQ中讯息游标

发布时间: 2012-09-04 14:19:30 作者: rapoo

ActiveMQ中消息游标

<p>???????? 在 ActiveMQ 5.0的之前版本中,broker 会把正在传输的消息保存在内存中。使用这种内存模型,当一个消费者消费消息的速度跟不上生产者生产消息的速度的时候,会是 broker 内存中维护的正在传输的消息数量迅速增长,最终到达最大限额。当到达此最大限额后,broker 就不能接受来自客户端的消息,这样生产者就会被阻塞直到 broker 的内存中有保存消息的空间为止。 </p>
<p>?????? 从 5.0 版本开始,ActiveMQ 实现了一种新的内存模型以防止慢速的消费者阻塞运行速度更快的生产者。这种内存模型使用了消息游标,详情请查看 <a href="http://activemq.apache.org/message-cursors.html">http://activemq.apache.org/message-cursors.html</a> 。 <br>??????? 当消息消费者在激活并且快速消息消息的情况下,紧跟消息的生产者。消息被消息存储并且被传递到消息者关联的broker对应的分发调度队列。</p>
<p>?<img src="http://dl.iteye.com/upload/picture/pic/93490/44ccef05-d76a-3530-a80a-f62c77770a27.png" alt="ActiveMQ中讯息游标" width="479" height="360"></p>
<p>?</p>
<p>?</p>
<p>如果消息消费者处于激活状态,处于存储状态的消息处于等待状态或者消费者消费比生产者慢的时候,消息将通过等待指针把消息从消息存储中将消息放入分发队列中。</p>
<p>?</p>
<p>?<img src="http://dl.iteye.com/upload/picture/pic/93488/e47d858c-5326-3bce-9b18-1872ca08bf0a.png" alt="ActiveMQ中讯息游标" width="484" height="366"></p>
<p>?</p>
<p>游标类型:</p>
<p>??? 在ActiveMQ5.0中默认消息指针类型是以存储为为基础。有两种类型的游标:vm Cursor和File Based Cursor。</p>
<p>?</p>
<p>Vm Cursor</p>
<p>????? 这种指针是从ActiveMQ4.x开始使用,当在需要的时候,消息将被存储到内存中同时把消息传递到分发队列中。这种基于内存指针速度很快,但是当消息者长时间处于非运行状态或者消息者消息很慢的时候,性能可能急速下降,内存占用比较高。</p>
<p><img src="http://dl.iteye.com/upload/picture/pic/93494/108ba4ee-2a8f-38bc-88fd-e5dde8d5eb14.png" alt="ActiveMQ中讯息游标" width="535" height="356"></p>
<p>?</p>
<p>File Based Cursor</p>
<p>? 这种指针在当Broker中内存达到最大的时候,指针将消息置入到磁盘上的临时文件中。这种消息的指针使用在消息者消费比较高。但是消息存储比较慢的情况。</p>

读书人网 >编程

热点推荐