欧洲时报本篇文章1007字,读完约3分钟
阿里云国际站经销商,主营阿里云,腾讯云,华为云,亚马逊aws,谷歌云gcp,微软云az,免费开户,代充值优惠大,联系客服飞机@jkkddd
简介
在长时间任务的场景中如果任务结束后没有回调机制,开发者通常会采用轮询的方式来判断任务的结束。可靠的轮询实现需要维护状态的持久化以保证即使当前轮询进程失败退出,进程恢复后轮询也会继续进行。本示例通过一个假设场景:用户调用函数计算提交了一个多媒体处理任务,该任务耗时从1分钟到几小时不等,任务执行状态可以通过API查询,介绍如何使用Serverless工作流实现一个通用可靠的任务轮询工作流。
Serverless工作流实现
下面的教程会将两个FC函数编排成一个任务轮询工作流,该示例需要以下3个步骤:
创建FC函数
创建Serverless工作流流程
开始执行并查看结果
步骤1:创建FC函数
首先创建一个名为fnf-demo的FC服务,并在该服务下创建两个Python2.7的函数,详细步骤,请参见使用控制台创建函数。
StartJob函数:模拟通过调用API开始一个长时间的任务,返回一个任务ID。
GetJobStatus函数:模拟通过调用API获取指定任务的执行结果,比较当前的时间和函数第一次执行的时间的差值和输入中delay的值,返回不同的状态:“success”或“running”。
步骤2:创建Serverless工作流流程
该流程的主要逻辑描述如下:
StartJob步骤:调用StartJob函数开始一个任务。
Wait10s步骤:等待10秒。
GetJobStatus步骤:调用GetJobStatus。
CheckJobComplete步骤:检查GetJobStatus函数返回的结果:
如果返回"success"整个流程执行成功。
如果轮询尝试次数大于3次,认为任务执行失败,流程执行失败。
如果返回"running"则跳回到Wait10s步骤,继续执行。
步骤3:开始执行并查看结果
在控制台创建好的流程中单击新执行并提供以下JSON对象作为输入,其中delay字段的值模拟任务完成需要的时间,这里预期任务在开始20秒后,GetJobStatus函数返回“success”,在此之前均返回“running”,您可以调整delay的值观察不同的执行结果