关于函数计算异步调用异常的处理方法

本文涉及的产品
简介: 介绍一下如何处理异步调用函数异常的问题

我们在使用函数计算的时候,往往会用它来处理异步请求,但是比较麻烦的是,异步调用期间报错后我们没有办法及时获取,从而影响对问题的修正。

当前的办法是定时轮询异步调用

image.png

查到调用状态是失败后再后根据requestId 等信息重新触发一个新的调度任务。

这样本身不是很及时,另外轮询任务会浪费资源。

有没有更好的办法解决呢?答案是使用 事件总线 EventBridge,其基本原理如下:

image.png

函数调用异常的信息投递到事先创建好的事件总线,总线根据事件规则将关联信息投递到另外一个处理的函数上,这个函数可以负责重新发起调度任务,接下来看看怎么做。

准备工作

异常函数

我们事先在函数计算上创建一个事件函数 fc-error,并且人工准备一个异常

'use strict';
/*
To enable the initializer feature (https://help.aliyun.com/document_detail/156876.html)
please implement the initializer function as below:
exports.initializer = (context, callback) => {
        
  console.log('initializing');
  callback(null, '');
};
*/
exports.handler = (event, context, callback) => {
  console.log('hello world');
  console.log(dddd); // 这里会报错
  callback(null, 'hello world');
}


处理函数

创建事件函数error-handler 处理异常的请求

'use strict';
/*
To enable the initializer feature (https://help.aliyun.com/document_detail/156876.html)
please implement the initializer function as below:
exports.initializer = (context, callback) => {
        
  console.log('initializing');
  callback(null, '');
};
*/
exports.handler = (event, context, callback) => {
  console.log('hello world');
  console.log('事件来源', event.toString());
  callback(null, 'hello world');
}


开通事件总线Eventbridge

开通Eventbridge ,创建一个自定义总线 fc-error-bridge, 同时在总线上创建好error-handler的事件规则,将事件目标指向error-handler

image.png

然后回到异常函数,设置失败的通知

image.png

image.png

准备好之后我们开始着手测试异常情况

测试异步调用函数异常


系统异常


回到错误函数我们先测试一下,非业务预期的异常,选择测试函数->异步调用,然后点击调用

www10.gif

之后查看调用日志,说明函数异常产生了。接下来我们查看eb,通过事件追踪

www11.gif

发现总线接收到了函数的异常,接下来看一下处理的函数

www12.gif

重新模拟异常后查看这个error-handler接收到了来自总线的事件,内容跟事件总线上一致,包含requestId和异常信息

业务异常

系统异常收取到之后,业务异常你也可以通过调用eb的sdk自行投递到 事件总线中。另外可以对整个业务try catch,通过throw 直接抛出去,这样总线依然可以接收并且处理

www13.gif


相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
8天前
|
人工智能 自然语言处理 API
深入浅出LangChain与智能Agent:构建下一代AI助手
LangChain为大型语言模型提供了一种全新的搭建和集成方式,通过这个强大的框架,我们可以将复杂的技术任务简化,让创意和创新更加易于实现。本文从LangChain是什么到LangChain的实际案例到智能体的快速发展做了全面的讲解。
279536 52
深入浅出LangChain与智能Agent:构建下一代AI助手
|
9天前
|
设计模式 人工智能 JSON
一文掌握大模型提示词技巧:从战略到战术
本文将用通俗易懂的语言,带你从战略(宏观)和战术(微观)两个层次掌握大模型提示词的常见技巧,真正做到理论和实践相结合,占领 AI 运用的先机。
237781 4
|
9天前
|
NoSQL Cloud Native Redis
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
阿里云瑶池数据库团队后续将持续参与Valkey社区,如过往在Redis社区一样耕耘,为开源社区作出持续贡献。
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
|
8天前
|
关系型数据库 分布式数据库 数据库
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
PolarDB分布式版助力《香肠派对》实现百亿好友关系20万QPS的毫秒级查询。
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
|
2天前
|
机器人 Linux API
基于Ollama+AnythingLLM轻松打造本地大模型知识库
Ollama是开源工具,简化了在本地运行大型语言模型(ile优化模型运行,支持GPU使用和热加载。它轻量、易用,可在Mac和Linux上通过Docker快速部署。AnythingLLM是Mintplex Labs的文档聊天机器人,支持多用户、多种文档格式,提供对话和查询模式,内置向量数据库,可高效管理大模型和文档。它也是开源的,能与Ollama结合使用,提供安全、低成本的LLM体验。这两款工具旨在促进本地高效利用和管理LLMs。
64697 19
|
10天前
|
消息中间件 Cloud Native Serverless
RocketMQ 事件驱动:云时代的事件驱动有啥不同?
本文深入探讨了云时代 EDA 的新内涵及它在云时代再次流行的主要驱动力,包括技术驱动力和商业驱动力,随后重点介绍了 RocketMQ 5.0 推出的子产品 EventBridge,并通过几个云时代事件驱动的典型案例,进一步叙述了云时代事件驱动的常见场景和最佳实践。
224898 2
|
7天前
|
物联网 PyTorch 测试技术
手把手教你捏一个自己的Agent
Modelscope AgentFabric是一个基于ModelScope-Agent的交互式智能体应用,用于方便地创建针对各种现实应用量身定制智能体,目前已经在生产级别落地。
|
10天前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
101883 3
|
10天前
|
自然语言处理 Cloud Native Serverless
通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验
近日,通义灵码正式进驻函数计算 FC WebIDE,让使用函数计算产品的开发者在其熟悉的云端集成开发环境中,无需再次登录即可使用通义灵码的智能编程能力,实现开发效率与代码质量的双重提升。
95462 4
|
1天前
|
人工智能 自然语言处理 API
Claude3是什么?
Claude 3最近备受各大媒体瞩目,成为了AI领域备受关注的新宠。在ChatGPT推出更高版本之前,Claude 3已经被公认为是语言类AI工具中的佼佼者,特别在处理逻辑性和长篇上下文方面表现突出。然而,与此同时,Claude 3的注册流程也备受诟病,被认为是所有AI工具中最为复杂的之一。 这篇内容教大家 注册Claude 3 以及升级 教程。
13680 1
Claude3是什么?