ActiveMQ消息游标 --转载
转:http://blog.csdn.net/m13321169565/article/details/8081358
在Activemq以前的版本中,broker会把待发送的消息保存在内存中。这种方式的缺陷是当消费者消费的速度赶不上生产者的速度时,会在broker的内存中积攒大量的消息,当达到一个限额后,broker就不再接收消息。这时生产者就被阻塞了,直到broker将内存清理能保存消息后才能继续发送。
在5.0版本后,Activemq实现了一种新的内存模型来防止慢消费者阻塞快速生产者。通常消息在未发生或者发送后未收到消费者的确认信息时都会持久保存消息到存储中。当有消费者来可以消费消息时,broker会批量从存储中取出消息,发送给消费者。游标就是指向下次批量获取消息时的存储位置。
根据游标的保存方式不同,可分为三种:
Store-based cursors
broker默认采用的游标。它将游标信息保存在存储中。针对速度不同的消费者,这种游标机制采取的方式不同。对于快速消费者,因为消费速度很快,存储中的消息数量会很少,所以不需要游标。这时,消息发送到broker时,先保存在持久存储中,然后直接发送给了消费者。而对于慢消费者,消息的持久存储中会保存大量的消息,所以需要使用游标来指定下一次批量读取消息的位置。
VM cursors
若消费者能跟上生产者生产的速度,这时持久存储中消息虽然不是很多,但是若能也能在内存中保存一些游标,对获取存储中的消息的性能会有很大的提升。
File-based cursors
对VM cursors
的一种改进。当内存中的游标达到一定限额后,就会将一些游标存储到临时文件中。
Activemq默认使用store-based游标。当然也可为不同的Destination修改游标策略。通过修改destinationPolicy节点来更改默认配置。destinationPolicy节点包含多ge
policyMap节点。policyMap包含一个policyEntries节点,policyEntries节点包含多个policyEntry
节点。policyEntry
就是具体的一个游标策略了。Topics的消费者分为持久订阅者和临时订阅者,所以有两套配置。Queues只有一类消费者,所以只有一套配置。对于持久订阅者可以使用PendingDurableSubscriberMessageStoragePolicy来指定游标策略。可配置的策略有vmDurableCursor和fileDurableSubscriberCursor.
对于临时订阅者可以使用pendingSubscriberPolicy
来指定。可配置的策略有vmCursor和fileCursor。下面是关于Topics的一些xml配置:
Xml代码
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic="com.iona.>">
<pendingSubscriberPolicy>
<vmCursor />
</pendingSubscriberPolicy>
<PendingDurableSubscriberMessageStoragePolicy>
<fileDurableSubscriberPolicy />
</PendingDurableSubscriberMessageStoragePolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy> [xml] view plaincopy <destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic="com.iona.>">
<pendingSubscriberPolicy>
<vmCursor />
</pendingSubscriberPolicy>
<PendingDurableSubscriberMessageStoragePolicy>
<fileDurableSubscriberPolicy />
</PendingDurableSubscriberMessageStoragePolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
Queues 同样也有vm和file两种类型的游标存储策略。pendingQueuePolicy 节点的可配置子节点有vmQueueCursor和fileQueueCursor
Xml代码
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue="com.iona.>">
<pendingQueuePolicy>
<vmQueueCursor />
</pendingQueuePolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
ActiveMQ消息游标 --转载的更多相关文章
- Activemq消息确认机制 --转载
转自:http://blog.csdn.net/czp11210/article/details/47022639 ActiveMQ消息传送机制以及ACK机制详解 AcitveMQ是作为一种消息存 ...
- 2015年12月10日 spring初级知识讲解(三)Spring消息之activeMQ消息队列
基础 JMS消息 一.下载ActiveMQ并安装 地址:http://activemq.apache.org/ 最新版本:5.13.0 下载完后解压缩到本地硬盘中,解压目录中activemq-core ...
- Activemq消息类型
Activemq消息类型JMS规范中的消息类型包括TextMessage.MapMessage.ObjectMessage.BytesMessage.和StreamMessage等五种.ActiveM ...
- ActiveMQ消息的可靠性机制(转)
文章转自:http://www.linuxidc.com/Linux/2013-02/79664.htm 1.JMS消息确认机制 JMS消息只有在被确认之后,才认为已经被成功地消费了.消息的成功消费通 ...
- activemq消息队列的使用及应用docker部署常见问题及注意事项
activemq消息队列的使用及应用docker部署常见问题及注意事项 docker用https://hub.docker.com/r/rmohr/activemq/配置在/data/docker/a ...
- JAVA的设计模式之观察者模式----结合ActiveMQ消息队列说明
1----------------------观察者模式------------------------------ 观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的 ...
- 深入浅出 JMS(三) - ActiveMQ 消息传输
深入浅出 JMS(三) - ActiveMQ 消息传输 一.消息协商器(Message Broker) broke:消息的交换器,就是对消息进行管理的容器.ActiveMQ 可以创建多个 Broker ...
- activemq消息重发机制[转]
大家知道,JMS规范中,Message消息头接口中有setJMSRedelivered(boolean redelivered)和getJMSRedelivered()方法,用于设置和获取消息的重发标 ...
- Activemq 消息类型 (转)
Activemq消息类型JMS规范中的消息类型包括TextMessage.MapMessage.ObjectMessage.BytesMessage.和StreamMessage等五种.ActiveM ...
随机推荐
- mysql常用函数示例
CREATE TABLE `orders` ( `OrderId` INT(10) NOT NULL AUTO_INCREMENT COMMENT '编号', `ProductName` VARCHA ...
- vue—你必须知道的
更多总结 猛戳这里 属性与方法 不要在实例属性或者回调函数中(例如,vm.$watch('a', newVal => this.myMethod())使用箭头函数.因为箭头函数会绑定父级上下文, ...
- ionic 之环境的搭建
在ionic的学习中,首先要做的就是环境的搭建,接下来我对从一开始环境的搭建做了记录,以及过程中遇到的问题. 1.安装环境 1.1 安装Node.js Node.js建议安装最新版本,下载地址:htt ...
- 1953 Problem B #103. 子串查找
#include<stdio.h> #include<string.h> main() { char a[100],b[100]; int n,k,i; gets(a); ge ...
- 树状数组【CF703D】Mishka and Interesting sum
Description 给你n( 1<=n<=1000000)个数,以及m(1<=m<=1000000)个询问,每个询问包括l和r,问你在这n个数中,区间l~r,出现偶数个数的 ...
- 安装mongodb插件
1.安装mngodb模块 wget http://pecl.php.net/get/mongodb-1.2.4.tgz tar zxf mongodb-1.2.4.tgz cd mongodb-1.2 ...
- 谜题15:令人晕头转向的Hello
下面的程序是对一个老生常谈的例子做出了稍许的变化之后的版本.那么,它会打印出什么呢? /** * Generated by the IBM IDL-to-Java compiler, version ...
- [APIO2015]巴厘岛的雕塑
题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 NN 座雕塑,为方便起见,我们把这些雕塑从 11 到 NN 连续地进行标号,其中第 ii 座雕塑的年龄是 Y ...
- 你真的懂ThreadPoolExecutor线程池技术吗?看了源码你会有全新的认识
Java是一门多线程的语言,基本上生产环境的Java项目都离不开多线程.而线程则是其中最重要的系统资源之一,如果这个资源利用得不好,很容易导致程序低效率,甚至是出问题. 有以下场景,有个电话拨打系统, ...
- 使用Arraylist产生不重复的随机数
在Java中主要有两种方法来获取随机数,分别是通过Math.random方法和Random类获得随机数,不过Math.random方法其实也是通过生成一个Random类实例,然后再生成随机数的,也就是 ...