RocketMQ 如何实现消息的定时投递?

RocketMQ实现消息定时投递主要通过两种方式:

1、延时消息:生产者在发送消息时通过设置delayTimeLevel指定延时级别,Broker会在指定时间后将消息投递至消费者。

  • 生产者发送延时消息:producer.send(msg, 3); // 延时3s发生消息
  • Broker在3s后将消息推送至消费者。

2、定时消息:生产者发送普通消息,而后通过控制台或代码向Broker设置定时规则,Broker会在规则触发时将消息投递至消费者。

  • 生产者发送普通消息:producer.send(msg);
  • 设置定时规则:
sh mqadmin updateTopic -n localhost:9876 -t TopicTest -r "0 30 10 * * ? 2023"
  • 此规则表示2023年每天10点30分将TopicTest中的消息定时投递。

相关代码:

1、 延时消息

  • DefaultMQProducer#send(msg, delayTimeLevel):生产者发送延时消息。
  • DelayTimeQueue:Broker延时消息队列,在延时时间后将消息投递。

2、定时消息

  • DefaultMQProducer#send(msg):生产者发送普通消息。
  • ScheduleMessageService:Broker定时服务,在规则触发时将消息投递。

RocketMQ提供延时消息与定时消息两种方式实现定时投递。理解两种方式的实现原理与用法,可以让我们根据业务需求选择恰当方式使用这一功能。