操作场景
死信队列 DLQ 是一个用户账号下的消息队列,可用于收集错误事件信息、分析失败原因。如果您为函数配置了死信队列,以下情形的事件会被发送到死信队列:
用户代码运行错误重试2次依然失败。
超限错误和系统错误重试超过24小时。
异步队列 消息堆积达到上限。
说明
死信队列消息属性
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 | |
TimeStampForInvoker | 调用函数时的毫秒级时间戳。 |
RequestId | 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 |
PushTime | 推送至消息队列的时间信息。 |
RetryNum | 重试次数(0 - 2)。 |
Ttl | 异步队列事件保留时长。 |
操作步骤
死信队列创建
说明
云函数目前支持消息队列 CMQ 的主题模式和队列模式作为死信队列,您可自行选择配置。
函数别名的死信队列会跟随主版本的死信队列,主版本死信队列即在控制台创建别名时第一个选择并配置的死信队列。
1. 登录 CMQ 消息队列控制台,创建您的死信队列。
CMQ 的主题模式支持标签过滤与路由匹配两种筛选方案,为了确保您的订阅者可以收到所有错误信息,请在添加订阅者时标签栏筛选设为空,BindingKey 筛选填“#”。
2. 登录 Serverless 控制台,创建您的函数。
3. 配置死信队列。
您可以在“新建函数”页面或“函数配置”页面进行死信队列的配置。
死信队列监控
使用死信队列时,权限错误、资源误配或消息的总大小超过目标队列或主题的限制大小均会导致死信投递失败。您可在云函数监控信息中查询“死信队列投递失败次数/次”。
1. 登录 Serverless 控制台,选择左侧导航栏中的函数服务。
2. 在主界面上方选择期望查看死信队列监控的函数所在地域,并单击列表页中期望查看监控的函数,进入函数详情页面。
3. 在函数详情页中,单击监控信息即可查看死信队列投递失败次数。