北京中烟创新科技有限公司(简称:中烟创新)自成立以来,一直专注于人工智能技术的研发和人机协同应用场景的赋能,并以此为核心提供专业的服务。在过去的近一年中,公司取得了一些令人瞩目的研究成果,我们一直坚持把一些研究成果技术分享给更多人,今天是中烟创新第十三次技术分享,希望能为前沿技术探索者贡献一份力量,互相学习,共同进步。
延迟队列在多种场景中发挥着关键作用,如在线支付的超时处理、用户签约的自动终止,以及团购活动的失败取消等。它们通常涉及从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、消息重新投递
当延迟时间到达时,消息会被重新投递到目标队列中,消费者可以从目标队列中消费这些消息。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.