1-12.关于ActiveMQ消息传送机制以及消息确认机制
Posted 交易技术汇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1-12.关于ActiveMQ消息传送机制以及消息确认机制相关的知识,希望对你有一定的参考价值。
消息的推/拉
对于消息在中间件及消费者间的传送,我们可以根据消费者的主动或被动获取消息来区分消息的推/拉模式。当中间件主动传送消息给消费者,我们可以认为这是一种推的模式;当消费者在消费完之前的消息后主动到中间件获取下一条消息,则我们可以认为这是一种拉的模式。
消息的推/拉都与中间件的一个参数有关,prefetchSize。其详细作用可参考官网说明:activemq.apache.org/what-is-the-prefetch-limit-for.html
当prefetch > 0 时,消息将会由中间件主动推给消费者;当prefetch = 0 时,消息将由消费者消费完上一消息后主动去获取,此时消费者会发送一个pullCommand如下:
由于默认值设置如下:
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)
当未设置prefetch值时一般都是采用推的模式进行消息传递。
消息的ACK机制
一条消息从producer端发出之后,一旦被broker正确保存,那么它将会被consumer消费,然后ACK,broker端才会删除;
由分享文章中我们可以看到消息消费及确认如下图所示:
从消息的消费过程来看,ACK分为多种类型,其用于确认消费者消费消息的不同阶段及状态,这一机制确保队列消息的不重复消费这一特点。
DELIVERED_ACK_TYPE= 0 消息"已接收",但尚未处理结束
STANDARD_ACK_TYPE= 2 "标准"类型,通常表示为消息"处理成功",broker端可以删除消息了
POSION_ACK_TYPE= 1 消息"错误",通常表示"抛弃"此消息,比如消息重发多次后,都无法正确处理时,消息将会被删除或者DLQ(死信队列)
REDELIVERED_ACK_TYPE= 3 消息需"重发",比如consumer处理消息时抛出了异常,broker稍后会重新发送此消息
INDIVIDUAL_ACK_TYPE= 4 表示只确认"单条消息",无论在任何ACK_MODE下
UNMATCHED_ACK_TYPE= 5 在Topic中,如果一条消息在转发给“订阅者”时,发现此消息不符合Selector过滤条件,那么此消息将 不会转发给订阅者,消息将会被存储引擎删除(相当于在Broker上确认了消息)。
以上是关于1-12.关于ActiveMQ消息传送机制以及消息确认机制的主要内容,如果未能解决你的问题,请参考以下文章