基本概念

最近更新时间: 2026-06-30 15:06:00

消息生命周期

普通消息被发送到普通消息队列时, 初始状态为 Active,当其被取走后在 VisibilityTimeout 的时间内状态为 Inactive,若超过 VisibilityTimeout 时间后消息还未被删除,消息会重新变成 Active 状态;如果在 VisibilityTimeout 时间内被删除,消息状态将变为 Deleted。消息的最长存活时间由创建队列时指定的 MessageRetentionPeriod 属性值决定, 超过此时间后消息状态变成 Expired 并将被回收。
消费者只能取到处于 Active 状态的消息。这保证了同一条消息不会同时被多次消费,但可被顺序性地多次消费。

  • Component 1 将 Message A 发送到一个队列,该消息在 TDMQ CMQ 版服务器间提供多份冗余。
  • 当 Component 2 准备好处理消息时,就从队列检索消息,然后 Message A 返回。在 Message A 处理期间,它仍然停留在队列中,在取出消息隐藏时长阶段,其他业务不可获取 Message A。
  • Component 2 可从队列删除 Message A,以避免一旦取出消息隐藏时长过期后该消息被再次接受并处理;也可以不删除 Message A,该消息可以被其他业务多次消费。

队列和消息标识符

队列名称
创建新队列时,用户必须提供在此地域范围内唯一的队列名称,不同地域间队列名称可以重复。消息队列 CMQ 版使用地域和队列名称唯一标识一个队列,每当用户要对队列执行操作时,都需要提供这两个参数。
消息 ID
每条消息都会收到一个由系统分配的消息 ID,该 ID 可由 SendMessage 接口请求中返回给用户。此标识符用于识别消息。需要注意的是,删除消息时用户需要消息的接收句柄,而不是消息 ID。消息 ID 有形如 Msg-XXXXXXXX 的样式。
接收句柄
每当收到来自队列的消息时,用户都会收到该消息的接收句柄。消息句柄始终与接收消息的操作相关联,与消息本身无关。要删除消息或更改消息属性,用户则必须提供接收句柄,而不是消息 ID。这意味着,必须始终先接收消息,然后才能删除/更改它。

说明:

如果多次接收某条消息,则每次接收该消息时,用户都会获得不同的接收句柄。在请求删除该消息时,您必须提供最近收到的接收句柄,否则可能无法删除该消息。