总括:
预取时生产者向消费者推预取的数量,消费完后再给,不消费玩不给(计划经济)(批量给相应的消费者)
预取为0时消费者主动获取
ActiveMQ的一个主要的设计目标是:提供一个高性能的消息中间件。它使用了SEDA(Staged Event Driven Architecture)架构及异步传输。为了提供更高的性能,很重要的一点是 尽快地将消息传送给消费者,这样消费者利用消息缓冲区等待处理,而不是等待消息。
然后,这样也有很大风险:不断地向 消费者 传送消息可能使得其消息缓冲溢出,因为传送的速度比消费者真正“消费”消息更快,这是很可能。
因此,ActiveMQ使用了 消息”预取限制“(prefetch limit):表示在某个时间段内,可能向消费者传输的最大消息量,如果达到该上限,那么停止发送,直到ActiveMQ收到消费者的acknowledgements(确认,表示已经处理了该消息)。prefetch limit可以针对每个不同的consumer来设置。
为了获取更高的性能,prefetch limit当然是越大越好,只要consumer有足够大的消息缓冲区(messagevolume)。如果消息的总量非常少,而且每个消息的处理时间非常的长,那么,可以将prefetch设置为1,这样,每次向consumer发送一个消息,等其确认已经处理完毕后,再发送第二个。
特别地,如果prefetch设置为0,表示consumer每次 主动向activeMQ要求传输最大的数据量,而不是被动地接收消息。
如何指定prefetech的值:
通过指定ActiveMQConnection或ActiveMQConnectionFactory的ActiveMQPretchPolicy来设置所有的pretch值:各种不同的消息服务都可以指定不同的值,如下:
- persistent queues (default value: 1000)
- non-persistent queues (default value: 1000)
- persistent topics (default value: 100)
- non-persistent topics (default value: Short.MAX_VALUE -1)
To change the prefetch size for all consumer types you would use a connection URI similar to:
tcp://localhost:61616?jms.prefetchPolicy.all=50
To change the prefetch size for just queue consumer types you would use a connection URI similar to:
tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1
It can also be configured on a per consumer basis using Destination Options.
P
PPooled Connections and prefetch
当连接来自一个连接池中,消费消息可能出现一些由于“prefetch”而产生的问题:预取的消息(还未被处理)当连接关闭时会被释放(即,可以在activeMQ中再次读取到该消息)。而连接池中的连接只有在连接池关闭后才真正的销毁。这使得 预取的消息直到连接被重用时才会被处理(或者等连接池关闭,可再次从activeMQ中读取)。这样导致了消息可能丢失,或者当连接池中有多个连接时,消息乱序(out-of-sequence)!
一个处理方法是:将生产者放入连接池,消费者则不放入连接池!当然,这样在消费者的性能上,会受到影响(当有多个线程快速的消费消息时,对象被不断的创建销毁)。
另外一种方法:将消费者的连接池中数量设为1。
第三种方法:在使用连接池的情况下,将prefetch设为1或者0。当使用Spring JMS和MessageDrivenPojo时,只能将prefetch设为1,而不能为0;
相关推荐
基于媒体数字信号处理器的流预取机制.pdf
提升处理器指针追逐访存性能的指令标签辅助的数据预取机制.pdf
ly模拟器Lynx预取机制模拟器用法:在文件夹config中,运行以下脚本以创建您的自定义配置: python3 lynx_create_config.py [-h] -f文件名-t过渡-m小姐-p预测-o OUTPUT.json FILENAME:是一个文本文件,包含程序读取...
该机制首先给出了副本协作预取架构,各个虚拟组织节点上的文件预取模块以协作的方式为虚拟组织内节点提供文件预取服务;然后,在副本协作预取架构的基础上设计了副本协作预取流程,其核心算法包括以作业类型为中心的本地...
#资源达人分享计划#
在深入分析GCC4.9循环级数组预取的基本实现机制,以及剖析基于预取收益和分析时间的三种不予预取的代价模型的基础上,得出影响循环数组预取效果的几个因素,并针对典型测试用例测试了GCC编译器循环数组预取的效果。...
通过利用WWW访问的空间局部性,Web预取使缓存机制从时间局部性向空间局部性扩展.归纳了Web预取技术的分类,概括和比较了不同类别的优势和局限性,给出了预取模型的基本框架及每部分的主要功能,并对各种评价标准进行了...
针对专题型应用中普遍存在的大数据查询的频繁性和模式固定性特点,提出一种基于模板的数据预取和缓存算法,用于加快数据查询响应速度并减轻服务器端负载压力。通过构建数据查询模板,在触发器被激发时调用模板以构建...
预执行帮助线程在预取过程中需要进行动态预取调节,而传统静态枚举控制参数值的控制方法在预取执行过程中保持固定不变,从而使得该方法不能够有效地为主线程提供预取质量保证(quality of service,QoS)。...
针对命名数据网络(named data networking,NDN)移动性增强支持不足的问题,基于城区移动场景提出了一种基于移动预测的内容预取方法(mobility-aware prediction approach for content prefetching,MAP-CP)及扩展...
To achieve on-demand software deployment in large-scale virtual machine (VM) environments, this paper presents a prefetch-based on-demand software deployment optimization mechanism to reduce the VM ...
web数据挖掘一篇很好的文章,希望想了解数据挖掘的人仔细研究,推荐!
提出了一种新的用于关系数据库查询缓冲和预取的方法。首先将数据查询语句抽象成由四元组组成的查询模板,同时保存了查询语句的实际参数。基于这些模板和参数,提出了两种智能预取算法以适应两类不同的数据查询需求。...
数据挖掘技术在Web预取中的应用研究.pdf
动态二进制翻译中数据预取优化研究,罗琼程,吴强,动态优化是动态二进制翻译研究中一个十分重要的课题,数据预取优化能提高现代处理器体系结构应用程序性能。基于超级块(SuperBlock)的
通过对面向链式结构的线程预取性能分析,研究链式数据结构程序热点循环的计算任务量与访存任务量比例特征对线程预取性能的影响。结合多核处理器平台特点,实现了一种适用于链式数据结构的帮助线程间隔预取方法。实验...
动态优化是动态二进制翻译研究中一个十分重要的课题,数据预取优化能提高现代处理器体系结构应用程序性能。基于超级块(Superblock)的动态数据预取优化采用软件插桩方式收集应用程序的load访存延迟信息并构造...
针对以上问题,结合数据预取理念提出一种基于资源预取的作业调度算法。通过估算节点上正在运行任务的剩余执行时间,并与传输一个数据块所需时间进行比较,预选出待预取的候选节点;并从当前正在运行作业的未分配任务...
Linux 内核中的预取算法 论文 中科大 吴峰光博士的论文
充分考虑到数据的时效性、本地性、操作的并发性以及文件之间的相关性,先根据相关性将文件合并,然后采用分布式多级存储,使用内存式Redis数据库做缓存,HDFS做数据的持久化存储,其过程采用预取机制。实验结果表明...