定时消息原理与使用
2024年9月26日
用户问题 :
定时消息原理与使用
专家官方解答 :
定时消息原理与使用
原因分析
根据提供的知识,定时/延时消息是Apache RocketMQ中的一种高级特性。其主要作用是在分布式场景下实现精准、可靠的定时事件触发。这种类型的消息在被发送到服务端后,并不会立即投递给消费者,而是会在指定的时间之后才被消费者消费。
功能原理
-
什么是定时消息
- 定时消息是指消息被发送至服务端后,在设定的未来某个时间点才会被消费者消费。
- 通过设置一定的定时时间可以实现分布式场景下的延时调度触发效果。
-
定时时间设置原则
- 设置的定时时间是一个预期触发的系统时间戳,需要转换成毫秒级的Unix时间戳。
- 定时时间必须设置为当前时间之后,否则会立即投递。
- 定时时长最大值默认为24小时,不支持自定义修改。
- 如果设置的定时时间超过了定时时长范围,消息也会立即投递。
-
定时消息生命周期
- 初始化:消息被生产者构建并完成初始化。
- 定时中:消息被发送到服务端,存储在定时存储系统中,等待定时时刻到达。
- 待消费:定时时刻到达后,消息重新写入普通存储引擎,对下游消费者可见。
- 消费中:消息被消费者获取并处理。
- 消费提交:消费者完成消费处理并向服务端提交结果。
- 消息删除:消息在保存时间到期或存储空间不足时被物理删除。
使用步骤
-
创建主题
- 创建一个类型为
DELAY
的主题,用于发送定时消息。
Terminal window sh mqadmin updateTopic -n <nameserver_address> -t <topic_name> -c <cluster_name> -a +message.type=DELAY- 参数说明:
-c
集群名称-t
Topic名称-n
nameserver地址-a
额外属性,本例给主题添加了message.type
为DELAY
的属性用来支持延迟消息
- 创建一个类型为
-
发送消息
- 在发送消息时,必须设置定时触发的目标时间戳。
- 以Java语言为例,使用定时消息示例参考链接:https://rocketmq.apache.org/zh/docs/featureBehavior/02delaymessage
解释
- 创建主题:首先需要创建一个专门用于发送定时消息的主题。这个主题的类型必须是
DELAY
,这样才能保证发送的消息是定时消息。 - 发送消息:在发送消息时,需要设置一个未来的触发时间。这个时间是一个Unix时间戳,表示消息应该在何时被投递给消费者。如果设置的时间已经过去,消息会立即被投递。
- 生命周期管理:消息在发送后会被存储在一个定时存储系统中,直到设定的时间到达。此时,消息会被重新写入普通存储引擎,供消费者消费。整个过程确保了消息在指定时间之前不会被消费,从而实现了定时功能。
通过以上步骤,可以有效地使用RocketMQ的定时消息功能来实现分布式场景下的定时任务调度和延时处理。
---------------
参考链接 :
-
专家经验:定时/延时消息
-
专家经验:rocketmq 特性(features)
-
专家经验:rocketMQ的基本概念
---------------
答疑服务说明:
本内容经由技术专家审阅的用户问答的镜像生成,我们提供了专家智能答疑服务,使用方法: 用法1: 在页面的右下的浮窗”专家答疑“。 用法2: 点击专家答疑页(针对部分网站不支持插件嵌入的情况)
另:
有其他开源产品的使用问题?点击访问阿里AI专家答疑服务。
反馈
如问答有错漏,欢迎点:差评给我们反馈。