RocketMq如何顺序消费的消息offest

RocketMq对于消费者对于消息的如何处理的

1:如果设置了自动提交

返回:

ConsumeOrderlyStatus.COMMIT, ConsumeOrderlyStatus.ROLLBACK, ConsumeOrderlyStatus.SUCCESS , 返回者三种状态都是会提交offset,

但是返回ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT 会校验是否重试。达到重试次数(达到设定的重试次数会投递到重试队列,见下文)还是失败也会提交offest;

RocketMq如何顺序消费的消息offest_第1张图片

2:如果是非自动提交:

只有返回commit才会提交offest,返回其他的状态都不会commit offest

返回:SUSPEND_CURRENT_QUEUE_A_MOMENT 需要重试的时候是不会继续消费,达到重试次数也不会提交offest。

RocketMq如何顺序消费的消息offest_第2张图片

判断方法主要获取最大的重试次数和当前消息的重试次数对比,如果达到了最大的重试次数就是执行 sendMessageBack 方法。这个方法将消息发送到重试队列中,稍后进行重试(还是失败及时投递到死信DLQ队列中)

发送失败,消息会继续重试。

如果当前重试次数小于最大重试次数,则继续阻塞重试。

RocketMq如何顺序消费的消息offest_第3张图片

这个是获取最大重试次数的方法,当没有设置重试次数 (默认 -1) 就重试Integer的最大值。否则以设定为准。

下面这段逻辑是达到重试次数后投递到重试队列的逻辑。

RocketMq如何顺序消费的消息offest_第4张图片

重试队列的topic:%RETRY%+{消费者组的名称}

顺序消息消费种对于顺序强要求的,需要消费失败阻塞消费的,可以设置非自动提交,然后捕获异常,只有消费成功才进行commit;

你可能感兴趣的:(RocketMq如何顺序消费的消息offest)