本文介绍如何通过工作流 ASW 编排云函数,疾速实现订单数据的解决。

工作原理

  1. 工作流调用函数获取肯定时间段内的订单数据,对数据进行预处理。
  2. 将预处理的数据交给 Map 迭代工作解决:每个订单进行数据处理后,别离写到不同的数据库表中,或者绘制成图表展现。

操作步骤

创立工作流程须要首先创立一个状态机,通过编排状态机的不同元件,扭转状态机构造,从而实现用户自定义的性能汇合。

简略三步即可实现:创立云函数 → 创立工作流 → 运行状态机

Step 1:创立云函数

创立 GetOrder 函数

  1. 登录 云函数控制台,单击左侧导航栏的【函数服务】。
  2. 在主界面上方函数服务区域抉择广州,并单击【新建】,进入函数创立流程。
  3. 在新建函数页面,根本信息中填写以下信息:

    • 函数名称:GetOrder。
    • 运行环境:Nodejs10.15。
    • 创立形式:抉择空白函数,单击【下一步】进入函数配置。
  4. 在函数配置页面中的 Cloud Studio 窗格中,删除原有代码,复制如下所示的代码:
   'use strict';   exports.main_handler = async (event, context) => {       console.log("this is get order function");       # 您能够通过api申请获取实在的订单数据,样例中数据不便模仿工作流执行          var orderlist = [           {               "orderId":"202012200001",               "goodsId":"1004",               "goodsName":"橘子#1004",               "unit":"件",               "specific":"5斤一箱",               "linePrice":100,               "salePrice":90,               "costPrice":80,               "number":30,               "isVoucher":1,               "voucherPrice":2,               "voucherId":"3dr55678hj",               "isDiscount":1,               "discountPrice":3,               "carriage": 8,               "receiver":"susu",               "phone":"18633567898",               "address":"深圳市南山区腾讯大厦20楼",               "createTime":"2020-12-20 10:00:00",               "payTime":"2020-12-20 11:00:00",               "payMethod":1,                "payOrder":"202012201100003940",               "orderStatus":3,               "deliveryTime":"2020-12-21 11:00:00",               "finishTime":"2020-12-25 11:00:00",               "deliveryOrder":"ZT12345789d786",               "isReturn":1,               "returnId":"2020122600012",               "returnNumber":2,               },            {               "orderId":"202012200001",               "goodsId":"2001",               "goodsName":"梨子#2001",               "unit":"件",               "specific":"6斤一箱",               "linePrice":150,               "salePrice":120,               "costPrice":90,               "number":20,               "isVoucher":1,               "voucherPrice":3,               "voucherId":"3dr55678hj",               "isDiscount":1,               "discountPrice":5,               "carriage": 0,               "receiver":"susu",               "phone":"18633567898",               "address":"深圳市南山区腾讯大厦20楼",               "createTime":"2020-12-20 10:00:00",               "payTime":"2020-12-20 11:00:00",               "payMethod":1,                "payOrder":"202012201100003940",               "orderStatus":3,               "deliveryTime":"2020-12-21 11:00:00",               "finishTime":"2020-12-25 11:00:00",               "deliveryOrder":"ZT12345789d786",               "isReturn":0,               "returnId":"",               "returnNumber":0,                   },           {               "orderId":"202012200001",               "goodsId":"3005",               "goodsName":"香蕉#3005",               "unit":"件",               "specific":"10斤一箱",               "linePrice":180,               "salePrice":150,               "costPrice":98,               "number":6,               "isVoucher":1,               "voucherPrice":8,               "voucherId":"3dr55678hj",               "isDiscount":1,               "discountPrice":20,               "carriage": 0,               "receiver":"susu",               "phone":"18633567898",               "address":"深圳市南山区腾讯大厦20楼",               "createTime":"2020-12-20 10:00:00",               "payTime":"2020-12-20 11:00:00",               "payMethod":1,                "payOrder":"202012201100003940",               "orderStatus":3,               "deliveryTime":"2020-12-21 11:00:00",               "finishTime":"2020-12-25 11:00:00",               "deliveryOrder":"ZT12345789d786",               "isReturn":1,               "returnId":"2020122600013",               "returnNumber":3,                   }       ];              return {"orderList":orderlist};   };
  1. 单击【保留】,则胜利创立了云函数

创立 ProcessOrder 函数

参考【创立 GetOrder 函数】的形式,创立 ProcessOrder 函数,代码如下:

'use strict';exports.main_handler = async (event, context) => {    console.log("this is processOrder function");    var order = event;    #数据处理    var income = order["salePrice"]-order["costPrice"];    var goodsInfo = {"goodsId":order["goodId"],"goodsName":order["goodsName"],"number":order["number"]};    var incomeInfo = {"goodsId":order["goodId"],"goodsName":order["goodsName"],"number":order["number"],"income":income};   return {        "goodsInfo":goodsInfo,        "incomeInfo":incomeInfo,        "salesInfo":salesInfo    };}

创立 GoodsSold 函数

参考【创立 GetOrder 函数】的形式,创立 GoodsSold 函数,代码如下:

'use strict';exports.main_handler = async (event, context) => {    console.log("this is goodsSold function");    //一些写入数据库或者图表展现操作    console.log(event);    return "GoodsSold success";};

创立 Income 函数

参考【创立 GetOrder 函数】的形式,创立 Income 函数,代码如下:

'use strict';exports.main_handler = async (event, context) => {    console.log("this is income function");    //一些写入数据库或者图表展现操作    console.log(event);    return "Income success";};

创立 SalesReturn 函数

参考【创立 GetOrder 函数】的形式,创立 SalesReturn 函数,代码如下:

'use strict';exports.main_handler = async (event, context) => {    console.log("this is salesReturn function");    //一些写入数据库或者图表展现操作    console.log(event);    return "SalesReturn success";};

Step 2:创立工作流

  1. 登录 利用与编排服务流控制台。
  2. 在状态机页面,单击【新建】,进入创立工作流页面中,抉择应用【代码创立】:

  1. 间接在代码编辑框中粘贴以下 TCSL 代码:
   {     "Comment": "订单解决",     "StartAt": "GetOrder",     "States": {       "GetOrder": {         "Type": "Task",         "Comment": "拉取数据",         "Resource": "qrn:qcs:asw:ap-guangzhou:12345678:sdk:json:qcloud:scf:Invoke/GetOrder",         "Next": "MapProcess"       },       "MapProcess": {         "Type": "Map",         "ItemsPath": "$.orderList",         "MaxConcurrency": 6,         "Iterator": {           "StartAt": "ProcessOrder",           "States": {             "ProcessOrder": {               "Type": "Task",               "Resource": "qrn:qcs:asw:ap-guangzhou:12345678:sdk:json:qcloud:scf:Invoke/ProcessOrder",               "Next": "ParallelDataProcess"             },             "ParallelDataProcess": {               "Type": "Parallel",               "End": true,               "Branches": [                 {                   "StartAt": "GoodsSold",                   "States": {                     "GoodsSold": {                       "InputPath": "$.goodsInfo",                       "Type": "Task",                       "Resource": "qrn:qcs:asw:ap-guangzhou:12345678:sdk:json:qcloud:scf:Invoke/GoodsSold",                       "End": true                     }                   }                 },                 {                   "StartAt": "Income",                   "States": {                     "Income": {                       "InputPath": "$.incomeInfo",                       "Type": "Task",                       "Resource": "qrn:qcs:asw:ap-guangzhou:12345678:sdk:json:qcloud:scf:Invoke/Income",                       "End": true                     }                   }                 },                 {                   "StartAt": "SalesReturn",                   "States": {                     "SalesReturn": {                       "InputPath": "$.salesInfo",                       "Type": "Task",                       "Resource": "qrn:qcs:asw:ap-guangzhou:12345678:sdk:json:qcloud:scf:Invoke/SalesReturn",                       "End": true                     }                   }                 }               ]             }           }         },         "End": true       }     }   }
  1. 单击右上角【下一步】,进入保留界面,输出状态机名称,运行角色抉择【新建角色】,类型抉择【规范状态机】,单击右上角【实现】,在状态机列表页能够看到创立好的状态机。

应用已有角色须要先创立角色,并给角色受权相干策略,操作详情参考 运行角色。

Step 3:运行状态机

状态机创立实现后,您能够在登录后的主页面查看创立好的状态机。

  1. 单击须要运行的状态机的【名称】,进入状态机。

  1. 您能够在界面中看到状态机的根本信息。单击【工作流执行】下的【开始执行】 。

  1. 在弹出的“输出”窗口中,以 JSON 格局输出状态机须要的输出内容。例如:
{"comment": "invoke workflow"}
  1. 单击【确定】,实现状态执行后,能够在详情页查看执行后果:

  1. 滑动至页面最下方,在【执行历史记录】条目下,您能够查看子节点的运行状况。

上述步骤介绍了一个订单数据处理场景的根本工作流流程。

实在的业务场景中每个 Task 节点会波及配置一些相干参数信息,例如做参数传递、异样重试和谬误捕捉解决等,更多详情参考 状态机语言。

申请试用 ASW

ASW 目前处于公测阶段,公测阶段收费提供服务。欢送提出产品改良倡议,反馈驳回后即可取得腾讯萌新短鹅公仔!

立刻申请公测,咱们将会在 3 个工作日内实现审批,并通过短信和站内信告诉您,感谢您的反对。

One More Thing

立刻体验腾讯云 Serverless Demo,支付 Serverless 新用户礼包 ???? serverless/start

欢送拜访:Serverless 中文网!