分布式-信息方式-ActiveMQ的Message dispatch高级特性之(指针) Message cursors

             Message dispatch高级特性之 Message cursors
概述
            ActiveMQ发送持久消息的典型处现方式是:当消息的消费者准备就绪时,消息发送系统把存储的
 消息按批次发送给消费者,在发送完一个批次的消息后,指针的标记位置指向下一批次待发送消息的位
 置,进行后续的发送操作。这是一种比较健壮和灵活的消息发送方式,但大多数管况下,消息的消费者
 不是一直处于这种理想的活跃状态
            因此,从 ActiveMQ5.0.0版本开始,消息发送系统采用一种混合型的发送模式,当消息消费者处
理活跃状态时,允许消息发送系统直接把持久消息发送给消费者,当消费者处于不活跃状态下,切换使
用 Cursors来处理消息的发送
           当消息消费者处于活跃状态并且处理能力比较强时,祓持久存储的消息直接被发送到与消费者

关联的发队列。如图下:

             当消息已经出现积压,消费者再开始活跃:或者消责者的消费速度比消息的发送速度慢
时,消息将从 Pending Cursor中提取,并发送与消费者关联的发送队列。见下图

根据游标的保存方式不同,可分为三种: 
Store-based cursors 
broker默认采用的游标。它将游标信息保存在存储中。

针对速度不同的消费者,这种游标机制采取的方式不同。

对于快速消费者,因为消费速度很快,存储中的消息数量会很少,所以不需要游标。

这时,消息发送到broker时,先保存在持久存储中,然后直接发送给了消费者。

而对于慢消费者,消息的持久存储中会保存大量的消息,所以需要使用游标来指定下一次批量读取消息的位置。 


VM cursors 
若消费者能跟上生产者生产的速度,这时持久存储中消息虽然不是很多,

但是若能也能在内存中保存一些游标,对获取存储中的消息的性能会有很大的提升。 


File-based cursors 
对VM cursors 的一种改进。当内存中的游标达到一定限额后,就会将一些游标存储到临时文件中。 

 

配置使用
        在缺省情况下, ActiveMQ会根据使用的 Message store来决定使用何种类型的 Message Cursors,
但是你可以根据 destination来配置 Message cursors,例如:

1:对Topic subscribers

<destinationPolicy>
    <policyMap>
        <policyEntries>
            <policyEntry topic="org.apache.>" producerFlowControl="false" memoryLimit="1mb">
            <dispatchPolicy>
                <strictOrderDispatchPolicy />
            </dispatchPolicy>
            <deadLetterStrategy>
                <individualDeadLetterStrategy topicPrefix="Test.DLQ." />
            </deadLetterStrategy>
            <pendingSubscriberPolicy>
                <vmCursor />
            </pendingSubscriberPolicy>
            <pendingDurableSubscriberPolicy>
                <vmDurableCursor/>
            </pendingDurableSubscriberPolicy>
            </policyEntry>
        </policyEntries>
    </policyMap>
</destinationPolicy>

配置说明:

       有效的 Subscriber类型是 vmCursor和 fileCursor,缺省是 store based cursor。有效的持久
化 Subscriber的 cursor types是 storeDurabTeSubscriberCursor, vmDurableCursor和
fileDurableSubscriberCursor,缺省是 store based cursor.

<destinationPolicy>
    <policyMap>
        <policyEntries>
            <policyEntry queue="org.apache.>">
                <deadLetterStrategy>
                    <individualDeadLetterStrategy queuePrefix="Test.DLQ."/>
                </deadLetterStrategy>
                <pendingQueuePolicy>
                    <vmQueueCursor />
                </pendingQueuePolicy>
        </policyEntry>
    </policyEntries>
</policyMap>
</destinationPolicy>

配置说明:有效的类型是storeCursor, vmQueueCursor 和 fileQueueCursor 

 

原文地址:https://www.cnblogs.com/caoyingjielxq/p/9389653.html