MST

星途 面试题库

面试题:消息队列之RocketMQ延迟消息机制的实现原理

请阐述RocketMQ延迟消息机制是如何实现的,包括涉及到的关键组件和大致流程。
22.9万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

关键组件

  1. Broker:负责接收、存储和转发消息。在延迟消息场景下,Broker对延迟消息进行特殊处理,根据延迟级别将消息存储到不同的队列中。
  2. ScheduleMessageService:这是Broker中的一个服务,用于处理延迟消息的调度。它负责从延迟队列中读取消息,并按照延迟时间将消息重新投递到目标队列。

大致流程

  1. 生产者发送延迟消息:生产者在发送消息时,指定消息的延迟级别(RocketMQ预设了一些延迟级别,如1s、5s、10s等)。消息被发送到Broker。
  2. Broker处理延迟消息:Broker接收到延迟消息后,根据其延迟级别,将消息存储到对应的延迟队列(例如SCHEDULE_TOPIC_XXXX下的不同队列,队列编号与延迟级别对应)。延迟消息在这些队列中不会被立即投递到消费者端。
  3. ScheduleMessageService调度:ScheduleMessageService定时扫描延迟队列,根据消息的延迟时间判断是否到期。当消息延迟时间到达,ScheduleMessageService将消息从延迟队列中取出,并重新投递到目标Topic的队列中。
  4. 消费者消费消息:消息被重新投递到目标Topic队列后,消费者就可以像消费普通消息一样消费这些延迟消息。