博客
关于我
ActiveMQ消息游标
阅读量:812 次
发布时间:2023-03-25

本文共 1682 字,大约阅读时间需要 5 分钟。

在Activemq之前的版本中,broker会将待发送的消息保存在内存中。这种方式的缺陷在于,当消费者消费速度无法赶上生产者速度时,会在broker的内存中积攒大量消息,达到限额后broker将停止接收消息,导致生产者被阻塞,直到内存清理后才能继续发送。这种情况在5.0版本后得到了改善,Activemq引入了新的内存模型以防止慢消费者阻塞快速生产者。

新的内存模型采取持久化保存消息的方式。当消息在发送后未收到消费者的确认信息时,会持久保存到存储中。当有消费者来消费时,broker会从存储中批量取出消息发送给消费者。游标就是指向下次批量获取消息的位置。

根据游标的保存方式,主要可分为三种类型:

1. Store-based cursors

默认采用的游标策略。它将游标信息保存在存储中。针对速度不同的消费者,这种策略采取不同的方式:

  • 对于快速消费者,因消费速度快,存储中的消息数量少,不需要游标,消息发送到broker时先保存在持久存储中后直接发送给消费者。
  • 对于慢消费者,因消息持久存储中会积攒大量消息,需要使用游标来指定下一次批量读取消息的位置。

2. VM cursors

这种策略适用于能够跟上生产速度的消费者。虽然持久存储中的消息数量不多,但在内存中保存一些游标,可以显著提升获取存储中消息的性能。

3. File-based cursors

对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/

你可能感兴趣的文章
Objective-C实现求两个数组的中位数算法(附完整源码)
查看>>
Objective-C实现求两点间距离(附完整源码)
查看>>
Objective-C实现求中位数(附完整源码)
查看>>
Objective-C实现求中位数(附完整源码)
查看>>
Objective-C实现求众数(附完整源码)
查看>>
Objective-C实现求圆锥的体积(附完整源码)
查看>>
Objective-C实现求曲线在某点的导数(附完整源码)
查看>>
Objective-C实现求最大公约数 (GCD)的算法(附完整源码)
查看>>
Objective-C实现求梯形面积公式(附完整源码)
查看>>
Objective-C实现求模逆算法(附完整源码)
查看>>
Objective-C实现求正弦(附完整源码)
查看>>
Objective-C实现求矩阵对角线元素之和(附完整源码)
查看>>
Objective-C实现汉密尔顿循环算法(附完整源码)
查看>>
Objective-C实现波利比乌斯密码算法(附完整源码)
查看>>
Objective-C实现波雷费密码算法(附完整源码)
查看>>
Objective-C实现洗牌移位密码算法(附完整源码)
查看>>
Objective-C实现测试信用卡号码有效性credit card validator的算法(附完整源码)
查看>>
Objective-C实现海伦公式(附完整源码)
查看>>
Objective-C实现海伦公式(附完整源码)
查看>>
Objective-C实现消息队列(附完整源码)
查看>>