死信队列

最近更新时间:2022-12-22 17:17:39

我的收藏

操作场景

死信队列 DLQ 是一个用户账号下的消息队列,可用于收集错误事件信息、分析失败原因。如果您为函数配置了死信队列,以下情形的事件会被发送到死信队列:
用户代码运行错误重试2次依然失败。
超限错误和系统错误重试超过24小时。
异步队列 消息堆积达到上限。
说明
死信队列功能目前处于内测阶段,如需使用请 提交工单 申请开通消息队列 CMQ。

死信队列消息属性

RequestId:(字符串)事件调用请求的唯一标识
ErrorCode:(数字)错误码状态
ErrorMessage:(字符串)错误信息
死信队列投递至消息队列 CMQ 时会把属性信息与事件信息封装在一个 JSON 请求体中,格式如下:
{
"RequestId": "b615b896-d197-47d7-8919-xxx",
"ErrorCode": -1,
"ErrorMessage": "Traceback (most recent call last):\\n File \\"/var/user/index.py\\", line 5, in main_handler\\n if 'key1' in event.keys():\\nNameError: global name 'event' is not defined",
"Body": {
"AppId": xxx,
"Uin": "xxx",
"SubAccountUin": "xxx",
"RequestSource": "TRIGGER_TIMER",
"FunctionName": "tabortest",
"Namespace": "default",
"Qualifier": "$DEFAULT",
"InvocationType": "RequestResponse",
"ClientContext": "{\\"Type\\":\\"Timer\\",\\"TriggerName\\":\\"tabortimer\\",\\"Time\\":\\"2020-10-10T01:22:00Z\\",\\"Message\\":\\"\\"}",
"LogType": "",
"TimeStampForInvoker": "160229310xxx",
"RequestId": "b615b896-d197-47d7-8919-xxx",
"PushTime": "2020-10-10T09:22:00.061824591+08:00",
"RetryNum": 2,
"Ttl": 0
}
}
结构名
内容
AppId
APPID。
Uin
主账号 ID。
SubAccountUin
创建者的子账号 ID(此字段可能返回 null,表示取不到有效值)。
RequestSource
触发器请求来源。
FunctionName
函数名称。
Namespace
命名空间。
Qualifier
触发函数的版本/别名。
ClientContext
运行函数时的参数,以 JSON 格式传入,最大支持的参数长度请参见 配额限制
TimeStampForInvoker
调用函数时的毫秒级时间戳。
RequestId
唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。
PushTime
推送至消息队列的时间信息。
RetryNum
重试次数(0 - 2)。
Ttl
异步队列事件保留时长。

操作步骤

死信队列创建

说明
云函数目前支持消息队列 CMQ 的主题模式和队列模式作为死信队列,您可自行选择配置。 函数别名的死信队列会跟随主版本的死信队列,主版本死信队列即在控制台创建别名时第一个选择并配置的死信队列。
1. 登录 CMQ 消息队列控制台,创建您的死信队列。 CMQ 的主题模式支持标签过滤与路由匹配两种筛选方案,为了确保您的订阅者可以收到所有错误信息,请在添加订阅者时标签栏筛选设为,BindingKey 筛选填“#”
2. 登录 Serverless 控制台,创建您的函数。
3. 配置死信队列。 您可以在“新建函数”页面或“函数配置”页面进行死信队列的配置。

死信队列监控

使用死信队列时,权限错误、资源误配或消息的总大小超过目标队列或主题的限制大小均会导致死信投递失败。您可在云函数监控信息中查询“死信队列投递失败次数/次”。
1. 登录 Serverless 控制台,选择左侧导航栏中的函数服务
2. 在主界面上方选择期望查看死信队列监控的函数所在地域,并单击列表页中期望查看监控的函数,进入函数详情页面。
3. 在函数详情页中,单击监控信息即可查看死信队列投递失败次数。