消息轨迹

轻量消息队列(原 MNS)提供消息轨迹查询功能,您可以通过消息轨迹查询消息的完整链路信息,包括消息的发送、订阅匹配、推送、消费等环节的时间、结果、生产者和消费者身份等信息,帮助您快速排查消息收发过程中的异常问题。

使用场景

轻量消息队列(原 MNS)的消息轨迹功能可以帮助您解决以下问题:

  • 查看消息是否发送成功:当您怀疑消息没有收到时,可以通过消息轨迹确认消息是否成功发送到队列或主题,以及消息是否被消费。

  • 排查消息重复消费问题:当您发现同一条消息被多次消费时,可以通过消息轨迹查看消息的完整消费记录,包括每次消费的时间、消费者身份和消费结果。

  • 排查主题推送失败问题:当主题的 HTTP 订阅、邮件订阅等推送失败时,可以通过消息轨迹查看推送的详细状态和失败原因。

  • 排查消息延迟问题:当您发现消息消费延迟过高时,可以通过消息轨迹查看消息在各个环节的时间,定位延迟发生的环节。

  • 查看定时消息的定时状态:查看定时消息是否已到达预设的定时时间。

  • 查询生产者和消费者的身份信息:查看消息发送方的 IP 地址、AccessKey,以及消费者的 IP 地址等信息,帮助您进一步排查问题。

轨迹参数说明

队列消息轨迹

队列消息轨迹包含发送信息、消息信息和消费信息三部分。

发送信息

普通发送场景

参数

说明

消息来源

消息的来源类型为生产者,指由生产者直接发送到队列

方法

API 操作类型,例如:SendMessage、BatchSendMessage

生产者 IP

发送消息的客户端 IP 地址

AccessKey

发送消息的 AccessKey

发送时间

消息到达队列的服务器时间

结果

发送结果,显示"成功"或具体的错误信息

死信场景

当消息从原队列进入死信队列时,会产生一条新的发送轨迹记录。

参数

说明

消息来源

常量:死信

原队列

消息原本所在的队列名称

原队列消息 ID

消息在原队列中的 Message ID

发送时间

消息进入死信队列的时间

结果

发送结果,显示"成功"或具体的错误信息

订阅推送场景

当主题通过队列订阅将消息推送到队列时,会产生一条发送轨迹记录。

参数

说明

消息来源

常量:主题的队列订阅

主题

推送消息的主题名称

订阅

推送消息的订阅名称

原消息 ID

消息在主题中的 Message ID

发送时间

消息推送到队列的时间

结果

发送结果,显示"成功"或具体的错误信息

其他云产品场景

当事件通知通过队列订阅将消息推送到队列时,会产生一条发送轨迹记录。

参数

说明

消息来源

常量:其他云产品

方法

常量:Notify

发送时间

消息推送到队列的时间

结果

发送结果,显示"成功"或具体的错误信息

消息信息

普通消息

参数

说明

消息类型

常量:普通消息

消息 ID

消息的唯一标识符

队列

消息所在的队列名称

保存时长

消息在队列中的最长保存时间,对应队列的 MessageRetentionPeriod 属性

可见性超时时长

消息被消费后的默认不可见时长,对应队列的 VisibilityTimeout 属性

定时消息

参数

说明

消息类型

常量:定时消息

消息 ID

消息的唯一标识符

队列

消息所在的队列名称

保存时长

消息在队列中的最长保存时间,对应队列的 MessageRetentionPeriod 属性

可见性超时时长

消息被消费后的默认不可见时长,对应队列的 VisibilityTimeout 属性

定时时长

消息的定时时长(秒)

预设定时结束时间

消息预设的可消费时间

消费信息

队列的消息消费轨迹按 ReceiptHandle 分组展示,每个 ReceiptHandle 代表消息的一次消费会话。

参数

说明

本次结果

本次消费会话的最终结果,包括但不限于:

  • 消费成功:消费者成功删除消息

  • 无应答:消费者获取消息后未删除,消息可见性超时后重新可消费

消费者 IP

接收或操作消息的客户端 IP 地址

AccessKey

操作消息的 AccessKey

ReceiptHandle

消息句柄,用于删除消息或修改消息可见性

操作时间

执行操作的服务器时间

操作

执行的 API 操作,包括:

  • ReceiveMessage:接收消息

  • BatchReceiveMessage:批量接收消息

  • DeleteMessage:删除消息

  • BatchDeleteMessage:批量删除消息

  • ChangeMessageVisibility:修改消息可见性超时时间

  • PeekMessage:查看消息

  • BatchPeekMessage:批量查看消息

说明
  • 一条消息可能产生多个 ReceiptHandle,每次调用 ReceiveMessage 或 BatchReceiveMessage 都会生成新的 ReceiptHandle。

  • 如果消费者在消息可见性超时前删除了消息,则本次消费会话结果为"成功"。

  • 如果消费者获取消息后未删除,消息在可见性超时后会重新可消费,产生新的 ReceiptHandle。

  • 如果使用已失效的 ReceiptHandle 操作消息,会返回 404 错误。

主题消息轨迹

主题消息轨迹包含发送信息、订阅匹配信息和推送信息三部分。

发送信息

普通发送场景

参数

说明

消息来源

消息的来源类型为生产者,指由生产者直接发送到主题

方法

API 操作类型,PublishMessage

生产者 IP

发送消息的客户端 IP 地址

AccessKey

发送消息的 AccessKey

发送时间

消息到达主题的服务器时间

结果

发送结果,显示"成功"或具体的错误信息

其他云产品场景

当事件通知通过队列订阅将消息推送到队列时,会产生一条发送轨迹记录。

参数

说明

消息来源

常量:其他云产品

方法

API 操作类型,PublishMessage

发送时间

消息推送到主题的时间

结果

发送结果,显示"成功"或具体的错误信息

订阅匹配信息

主题收到消息后,会根据订阅的过滤条件(FilterTag)匹配符合条件的订阅,并向这些订阅推送消息。

参数

说明

消息 ID

消息的唯一标识符

Tag

消息的标签,用于订阅过滤

订阅名

匹配到的订阅名称

订阅类型

订阅的终端节点类型,包括:

  • 队列:推送到队列

  • HTTP:推送到 HTTP/HTTPS 终端节点

  • 邮箱:通过邮件推送

  • 阿里短信:通过短信推送

推送信息

队列订阅

参数

说明

消息 ID

推送到队列后的新消息 ID

消费结果

推送是否成功,显示"成功"或具体的错误信息

推送时间

开始推送的时间

处理耗时

推送耗时,单位为毫秒

其他订阅(HTTP/邮箱/阿里短信)

参数

说明

推送结果

推送的状态码和结果,包括:

  • 2xx

  • 4xx

  • 5xx

推送时间

开始推送的时间

处理耗时

推送耗时,单位为毫秒

使用限制

  • 消息轨迹开关:消息轨迹默认处于关闭状态,可在消息轨迹页面手动打开功能。

  • 查询时间范围:开始时间的取值范围是近 15 天,每次查询的时间跨度不超过 3 天。

计费说明

请参见消息轨迹费用

消息轨迹存储时长

消息轨迹数据保存 15 天,超过 15 天的轨迹数据将被自动删除,无法查询。

查询方式

轻量消息队列(原 MNS)提供 5 种消息轨迹查询方式,您可以根据实际场景选择合适的查询方式。

查询方式

适用场景

返回结果

按消息 ID 查询

已知消息 ID,需要查询该消息的完整轨迹

返回唯一的消息轨迹

按 RequestID 查询

已知 API 请求的 RequestID,需要查询该请求涉及的消息

返回该请求涉及的消息轨迹

按队列名查询

需要查看某个队列在一段时间内的所有消息轨迹

返回该队列在指定时间范围内的消息轨迹

按主题名查询

需要查看某个主题在一段时间内的所有消息轨迹

返回该主题在指定时间范围内的消息轨迹

按订阅名查询

需要查看某个订阅在一段时间内推送的所有消息轨迹

返回该订阅在指定时间范围内推送的消息轨迹

说明
  • 如果已知消息 ID,优先使用按消息 ID 查询,可以快速获取精确结果。

  • 如果需要排查一段时间内的消息问题,可以使用按队列名、主题名或订阅名查询。

  • 按 RequestID 查询适用于排查 API 调用问题,例如批量发送或批量消费的场景。

操作步骤

查询消息轨迹

  1. 登录轻量消息队列(原 MNS)控制台

  2. 在左侧导航栏,选择消息轨迹

  3. 在顶部菜单栏,选择地域。

  4. 点击消息轨迹未开启按钮,打开消息轨迹功能。

  5. 消息轨迹页面,根据需要选择查询方式并输入查询条件。

    • 按消息 ID 查询:输入消息 ID,单击查询

    • 按 RequestID 查询:输入 API 请求的 RequestID,单击查询

    • 按队列名查询:选择队列名称,选择开始时间(最近 15 天内,时间跨度不超过 3 天),单击查询

    • 按主题名查询:选择主题名称,选择开始时间(最近 15 天内,时间跨度不超过 3 天),单击查询

    • 按订阅名查询:选择主题和订阅名称,选择开始时间(最近 15 天内,时间跨度不超过 3 天),单击查询

  6. 在查询结果列表中,找到目标消息,单击操作列的详情

  7. 在消息轨迹详情页面,查看消息的完整轨迹信息。

    • 队列消息轨迹详情:包含发送信息、消息信息和消费信息。

      • 发送信息:查看消息的来源、发送方法、生产者 IP、AccessKey、到达时间和发送结果。

      • 消息信息:查看消息 ID、队列名称、保存时长、可见性超时时长等。如果是定时消息,还会显示定时时长和预设定时结束时间。

      • 消费信息:按 ReceiptHandle 分组展示消息的消费记录。展开某个 ReceiptHandle,可以查看该消费会话的所有操作,包括接收、删除、修改可见性等操作的时间、消费者 IP 和操作结果。

    • 主题消息轨迹详情:包含发送信息、订阅匹配信息和推送信息。

      • 发送信息:查看消息的发送方法、生产者 IP、AccessKey、到达时间和发送结果。

      • 订阅匹配信息:查看消息 ID、Tag、匹配到的订阅名称和订阅类型。

      • 推送信息:查看每个订阅的推送结果、推送时间等。对于队列订阅,会显示推送后的新消息 ID;对于 HTTP、邮件、短信订阅,会显示推送状态码和推送耗时。

    image

  8. (可选)如果需要查看队列订阅推送到队列后的消息轨迹,可以单击推送信息中的Message ID链接,跳转到该队列消息的轨迹详情。

    image

常见问题

Q:为什么查询不到消息轨迹?

A:可能的原因包括:

  • 消息轨迹数据超过 15 天已被删除。

  • 查询的时间范围不准确,建议适当扩大查询时间范围。

  • 消息 ID 或 RequestID 输入错误,请检查后重新查询。

Q:消息轨迹中显示"未响应"是什么意思?

A:"未响应"表示消费者接收消息后,在可见性超时时间内既未删除消息,也未修改可见性超时时间,导致消息可见性超时后重新可消费。建议检查消费者程序是否正常处理消息并删除消息。

Q:为什么一条消息有多个 ReceiptHandle?

A:每次调用 ReceiveMessage 或 BatchReceiveMessage API 接收消息时,都会生成一个新的 ReceiptHandle。如果消费者接收消息后未删除,消息可见性超时后会重新可消费,此时再次接收会生成新的 ReceiptHandle。

Q:消息轨迹会影响消息收发的性能吗?

A:消息轨迹的记录是异步进行的,不会影响消息收发的性能和可靠性。即使轨迹记录失败,也不会影响正常的消息收发。