延迟消息功能 定时和延时消息
消息队列 CMQ 延迟消息功能 - 消息队列(Queue)模型 - 文档中心 - 腾讯云 https://cloud.tencent.com/document/product/406/8128
CMQ 消息定时器允许您为要添加到队列的消息指定初始的不可见时段,称为飞行状态。例如,如果您发送一条消息并将 DelaySeconds 参数设置为45,则使用者在该消息进入队列后的前45秒将看不到该消息。DelaySeconds 的默认值为0。
延迟消息设置范围:指定 Queue 生产消息时,可增加 DelaySeconds 入参,取值范围为0 - 3600秒,即消息最长不可见时长为1小时。若为空,则无延迟效果。
使用限制:每个队列处于飞行状态的消息数限制为2万条,若队列中处于飞行状态的消息超过2万条,则新生产的消息不允许消费,需要等待当前飞行状态的消息到期才可以继续消费。Topic 模式下该能力暂不支持。
定时和延时消息_消息类型_功能与特性_产品简介_消息队列 RocketMQ 版-阿里云 https://help.aliyun.com/document_detail/43349.html
本文主要介绍消息队列 RocketMQ 版的定时消息和延时消息的概念、适用场景以及使用过程中的注意事项。
概念介绍
- 定时消息:Producer 将消息发送到消息队列 RocketMQ 版服务端,但并不期望立马投递这条消息,而是推迟到在当前时间点之后的某一个时间投递到 Consumer 进行消费,该消息即定时消息。
- 延时消息:Producer 将消息发送到消息队列 RocketMQ 版服务端,但并不期望立马投递这条消息,而是延迟一定时间后才投递到 Consumer 进行消费,该消息即延时消息。
定时消息与延时消息在代码配置上存在一些差异,但是最终达到的效果相同:消息在发送到消息队列 RocketMQ 版服务端后并不会立马投递,而是根据消息中的属性延迟固定时间后才投递给消费者。
适用场景
定时消息和延时消息适用于以下一些场景:
- 消息生产和消费有时间窗口要求,例如在电商交易中超时未支付关闭订单的场景,在订单创建时会发送一条延时消息。这条消息将会在 30 分钟以后投递给消费者,消费者收到此消息后需要判断对应的订单是否已完成支付。如支付未完成,则关闭订单。如已完成支付则忽略。
- 通过消息触发一些定时任务,例如在某一固定时间点向用户发送提醒消息。
使用方式
定时消息和延时消息的使用在代码编写上存在略微的区别:
- 发送定时消息需要明确指定消息发送时间点之后的某一时间点作为消息投递的时间点。
- 发送延时消息时需要设定一个延时时间长度,消息将从当前发送时间点开始延迟固定时间之后才开始投递。
注意事项
- 定时消息的精度会有 1s ~ 2s 的延迟误差。
- 定时和延时消息的
msg.setStartDeliverTime
参数需要设置成当前时间戳之后的某个时刻(单位毫秒)。如果被设置成当前时间戳之前的某个时刻,消息将立刻投递给消费者。 - 定时和延时消息的
msg.setStartDeliverTime
参数可设置 40 天内的任何时刻(单位毫秒),超过 40 天消息发送将失败。 StartDeliverTime
是服务端开始向消费端投递的时间。 如果消费者当前有消息堆积,那么定时和延时消息会排在堆积消息后面,将不能严格按照配置的时间进行投递。- 由于客户端和服务端可能存在时间差,消息的实际投递时间与客户端设置的投递时间之间可能存在偏差。
- 设置定时和延时消息的投递时间后,依然受 3 天的消息保存时长限制。
例如,设置定时消息 5 天后才能被消费,如果第 5 天后一直没被消费,那么这条消息将在第 8 天被删除。
定时和延时消息
定时和延时消息_消息类型_功能与特性_产品简介_消息队列 RocketMQ 版-阿里云 https://help.aliyun.com/document_detail/43349.html
更新时间:2020-06-03 10:54:40
本文主要介绍消息队列 RocketMQ 版的定时消息和延时消息的概念、适用场景以及使用过程中的注意事项。
概念介绍
- 定时消息:Producer 将消息发送到消息队列 RocketMQ 版服务端,但并不期望立马投递这条消息,而是推迟到在当前时间点之后的某一个时间投递到 Consumer 进行消费,该消息即定时消息。
- 延时消息:Producer 将消息发送到消息队列 RocketMQ 版服务端,但并不期望立马投递这条消息,而是延迟一定时间后才投递到 Consumer 进行消费,该消息即延时消息。
定时消息与延时消息在代码配置上存在一些差异,但是最终达到的效果相同:消息在发送到消息队列 RocketMQ 版服务端后并不会立马投递,而是根据消息中的属性延迟固定时间后才投递给消费者。
适用场景
定时消息和延时消息适用于以下一些场景:
- 消息生产和消费有时间窗口要求,例如在电商交易中超时未支付关闭订单的场景,在订单创建时会发送一条延时消息。这条消息将会在 30 分钟以后投递给消费者,消费者收到此消息后需要判断对应的订单是否已完成支付。如支付未完成,则关闭订单。如已完成支付则忽略。
- 通过消息触发一些定时任务,例如在某一固定时间点向用户发送提醒消息。
使用方式
定时消息和延时消息的使用在代码编写上存在略微的区别:
- 发送定时消息需要明确指定消息发送时间点之后的某一时间点作为消息投递的时间点。
- 发送延时消息时需要设定一个延时时间长度,消息将从当前发送时间点开始延迟固定时间之后才开始投递。
注意事项
- 定时消息的精度会有 1s ~ 2s 的延迟误差。
- 定时和延时消息的
msg.setStartDeliverTime
参数需要设置成当前时间戳之后的某个时刻(单位毫秒)。如果被设置成当前时间戳之前的某个时刻,消息将立刻投递给消费者。 - 定时和延时消息的
msg.setStartDeliverTime
参数可设置 40 天内的任何时刻(单位毫秒),超过 40 天消息发送将失败。 StartDeliverTime
是服务端开始向消费端投递的时间。 如果消费者当前有消息堆积,那么定时和延时消息会排在堆积消息后面,将不能严格按照配置的时间进行投递。- 由于客户端和服务端可能存在时间差,消息的实际投递时间与客户端设置的投递时间之间可能存在偏差。
- 设置定时和延时消息的投递时间后,依然受 3 天的消息保存时长限制。
例如,设置定时消息 5 天后才能被消费,如果第 5 天后一直没被消费,那么这条消息将在第 8 天被删除。