全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网
消息队列 MQ

定时消息和延时消息

更新时间:2017-09-06 14:59:40

本文档主要介绍 MQ 定时消息和延时消息的概念、适用场景以及使用过程中的注意事项。

概念介绍

  • 定时消息:Producer 将消息发送到 MQ 服务端,但并不期望这条消息立马投递,而是推迟到在当前时间点之后的某一个时间投递到 Consumer 进行消费,该消息即定时消息。
  • 延时消息:Producer 将消息发送到 MQ 服务端,但并不期望这条消息立马投递,而是延迟一定时间后才投递到 Consumer 进行消费,该消息即延时消息。

定时消息与延迟消息在代码配置上存在一些差异,但是最终达到的效果相同:消息在发送到 MQ 服务端后并不会立马投递,而是根据消息中的属性延迟固定时间后才投递给消费者。

适用场景

定时/延时消息适用于如下一些场景:

  • 消息生产和消费有时间窗口要求:比如在电商交易中超时未支付关闭订单的场景,在订单创建时会发送一条 MQ 延时消息,这条消息将会在30分钟以后投递给消费者,消费者收到此消息后需要判断对应的订单是否已完成支付。如支付未完成,则关闭订单,如已完成支付则忽略。
  • 通过消息触发一些定时任务,比如在某一固定时间点向用户发送提醒消息。

使用方式

定时消息、延时消息的使用在代码编写上存在略微的区别:

  • 发送定时消息需要明确指定消息发送时间点之后的某一时间点作为消息投递的时间点。
  • 发送延时消息时需要设定一个延时时间长度,消息将从当前发送时间点开始延迟固定时间之后才开始投递。

注意事项

  1. 定时/延时消息 msg.setStartDeliverTime 的参数需要设置成当前时间戳之后的某个时刻(单位毫秒),如果被设置成当前时间戳之前的某个时刻,消息将立刻投递给消费者。
  2. 定时/延时消息 msg.setStartDeliverTime 的参数可设置40天内的任何时刻(单位毫秒),超过40天消息发送将失败。
  3. StartDeliverTime 是服务端开始向消费端投递的时间。如果消费者当前有消息堆积,那么定时、延时消息会排在堆积消息后面,将不能严格按照配置的时间进行投递。
  4. 由于客户端和服务端可能存在时间差,定时消息/延时消息的投递也可能与客户端设置的时间存在偏差。
  5. 设置定时、延时消息的投递时间后,依然受 3 天的消息保存时长限制。例如,设置定时消息 5 天后才能被消费,如果第 5 天后一直没被消费,那么这条消息将在第8天被删除。
  6. 除 TCP 协议接入的 Java 语言支持延时消息,其他方式都不支持延时消息。

示例代码

发送定时消息和延时消息的示例代码请参考以下文档:

TCP 协议接入:

Java

C++

.NET

HTTP 协议接入:

本文导读目录