本文共 1682 字,大约阅读时间需要 5 分钟。
在Activemq之前的版本中,broker会将待发送的消息保存在内存中。这种方式的缺陷在于,当消费者消费速度无法赶上生产者速度时,会在broker的内存中积攒大量消息,达到限额后broker将停止接收消息,导致生产者被阻塞,直到内存清理后才能继续发送。这种情况在5.0版本后得到了改善,Activemq引入了新的内存模型以防止慢消费者阻塞快速生产者。
新的内存模型采取持久化保存消息的方式。当消息在发送后未收到消费者的确认信息时,会持久保存到存储中。当有消费者来消费时,broker会从存储中批量取出消息发送给消费者。游标就是指向下次批量获取消息的位置。
根据游标的保存方式,主要可分为三种类型:
默认采用的游标策略。它将游标信息保存在存储中。针对速度不同的消费者,这种策略采取不同的方式:
这种策略适用于能够跟上生产速度的消费者。虽然持久存储中的消息数量不多,但在内存中保存一些游标,可以显著提升获取存储中消息的性能。
对VM cursors的一种改进。当内存中的游标达到限额时,将部分游标存储到临时文件中。
Activemq默认使用store-based游标策略,但可以根据不同的Destination修改游标策略。通过修改destinationPolicy节点来更改默认配置。destinationPolicy节点包含policyMap,policyMap下包含policyEntries,每个policyEntry对应一个具体的游标策略。
对于持久订阅者(Topics),有两套配置:PendingDurableSubscriberMessageStoragePolicy下的vmDurableCursor和fileDurableSubscriberCursor。对于临时订阅者(Topics),有vmCursor和fileCursor两种策略。
对于Queues,同样有vm和file两种游标存储策略。Queues的配置主要通过pendingQueuePolicy节点下的vmQueueCursor和fileQueueCursor来实现。
以下是关于Topics的一些XML配置示例:
Queues的配置示例如下:
这种配置方式可以灵活地根据不同的消息类型和消费者需求选择合适的游标策略,从而优化消息的生产和消费过程。
转载地址:http://yzhfk.baihongyu.com/