面试题答案
一键面试关键组件
- Broker:负责接收、存储和转发消息。在延迟消息场景下,Broker对延迟消息进行特殊处理,根据延迟级别将消息存储到不同的队列中。
- ScheduleMessageService:这是Broker中的一个服务,用于处理延迟消息的调度。它负责从延迟队列中读取消息,并按照延迟时间将消息重新投递到目标队列。
大致流程
- 生产者发送延迟消息:生产者在发送消息时,指定消息的延迟级别(RocketMQ预设了一些延迟级别,如1s、5s、10s等)。消息被发送到Broker。
- Broker处理延迟消息:Broker接收到延迟消息后,根据其延迟级别,将消息存储到对应的延迟队列(例如SCHEDULE_TOPIC_XXXX下的不同队列,队列编号与延迟级别对应)。延迟消息在这些队列中不会被立即投递到消费者端。
- ScheduleMessageService调度:ScheduleMessageService定时扫描延迟队列,根据消息的延迟时间判断是否到期。当消息延迟时间到达,ScheduleMessageService将消息从延迟队列中取出,并重新投递到目标Topic的队列中。
- 消费者消费消息:消息被重新投递到目标Topic队列后,消费者就可以像消费普通消息一样消费这些延迟消息。