打开网易新闻 查看精彩图片

北京中烟创新科技有限公司(简称:中烟创新)自成立以来,一直专注于人工智能技术的研发和人机协同应用场景的赋能,并以此为核心提供专业的服务。在过去的近一年中,公司取得了一些令人瞩目的研究成果,我们一直坚持把一些研究成果技术分享给更多人,今天是中烟创新第十三次技术分享,希望能为前沿技术探索者贡献一份力量,互相学习,共同进步。

打开网易新闻 查看精彩图片

延迟队列在多种场景中发挥着关键作用,如在线支付的超时处理、用户签约的自动终止,以及团购活动的失败取消等。它们通常涉及从15分钟到30分钟不等的延迟设置。

实现延迟处理的手段很多:

1.定时任务扫描,到时间就处理

2.利用 Redis 队列,不断投递检查,到时间就处理

3.JDK 的延迟队列

4.Rocket MQ的延迟队列

5.Rabbit MQ的延迟队列

6....

选择技术工具时,并无绝对的好坏之分,关键在于找到最适合您特定场景的解决方案。

本文主要讲解 RocketMQ 的延迟队列,主要有以下优点:

1.高吞吐量

2.低延迟

3.使用人群范围广

RocketMQ是一款集高性能、高可靠性与分布式特性于一体的消息中间件,深受广泛的开发者和企业用户青睐。

1、高吞吐

卓越的吞吐量:得益于其精心设计的队列架构,RocketMQ 能够实现高效的数据存储与网络传输,轻松处理每秒数百万条消息的高吞吐量需求。

2、低延迟

RocketMQ 的消息传输延迟通常在毫秒级别,能够满足对实时性要求较高的应用场景。

每个延迟级别的扫描时间间隔是固定的,通常为 1 秒。这意味着 RocketMQ 的定时任务会每秒钟扫描一次所有的延迟队列,检查是否有消息的延迟时间已经到达。如果有消息的延迟时间到达,这些消息会被重新投递到目标队列中。

3、可靠性

RocketMQ 提供了多种机制来保证消息的可靠传输和存储。

1.消息持久化:RocketMQ 支持将消息持久化到磁盘,确保在系统故障时消息不会丢失。

2.消息重试:RocketMQ 支持消息重试机制,当消息消费失败时,可以自动进行重试,确保消息最终被成功处理。

3.消息确认:RocketMQ 支持消息确认机制,消费者在成功处理消息后需要发送确认,确保消息不会被重复消费。

4、设计简单

多个 Level 队列,定时任务扫描每个 Level 数据,到时间则投递至目标队列进行等待消费。

打开网易新闻 查看精彩图片

基本使用

基本使用指南:生产者负责发送消息至延迟队列,而消费者则在设定的延迟时间后从目标队列中接收并处理消息。

生产者:

打开网易新闻 查看精彩图片

消费者:

打开网易新闻 查看精彩图片

RocketMQ 的实现原理简洁而高效,通过18个预定义的延迟级别,覆盖从1秒到2小时的延迟需求。每个级别对应专属队列,由定时任务负责扫描并精确地在延迟时间到期时,将消息重新投递至目标队列。

1、延迟级别

RocketMQ 通过预定义的延迟级别来实现延迟队列。每个延迟级别对应一个固定的延迟时间。默认情况下,RocketMQ 提供了 18 个延迟级别,延迟时间从 1 秒到 2 小时不等。

打开网易新闻 查看精彩图片

2、消息存储

当生产者发送一条延迟消息时,消息会被存储在一个特殊的队列中,这个队列根据消息的延迟级别进行划分。每个延迟级别都有一个对应的队列。

3、定时扫描

RocketMQ 的 Broker 端有一个定时任务,用于扫描这些延迟队列。当定时任务发现某个延迟队列中的消息已经到达指定的延迟时间时,会将这些消息重新投递到目标队列中。

打开网易新闻 查看精彩图片

4、消息重新投递

当延迟时间到达时,消息会被重新投递到目标队列中,消费者可以从目标队列中消费这些消息。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片