开发者社区 > 云原生 > Serverless > 正文

请问 函数计算 有异步执行后, 通过uuid 获取函数计算结果的方法吗?

请问 函数计算 有异步执行后, 通过uuid 获取函数计算结果的方法吗?

展开
收起
绿子直子 2023-05-15 12:55:14 169 0
6 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在阿里云函数计算中,异步调用函数之后,可以通过异步调用的方式获取函数执行结果。具体来说,可以使用服务端回调或者客户端轮询的方式获取结果。

    服务端回调方式:可以在异步调用时指定回调地址,函数执行完毕后会将执行结果以 POST 或 GET 方式发送到指定的回调地址。这种方式需要自己实现回调接口,并处理回调信息。

    客户端轮询方式:可以在异步调用时获取到一个 Request ID(或者说 Trace ID),通过这个 ID 可以轮询查询函数执行结果。具体来说,可以在异步调用返回的 response 中获取 Request ID,然后通过查询函数执行日志或者调用阿里云提供的查询接口(如 GetExecutionResult 接口)获取函数执行结果,直到获取到执行结果为止。

    在使用客户端轮询方式获取结果时,可以通过给异步调用传递一个自定义的 UUID,然后通过查询接口根据这个 UUID 获取函数执行结果。具体来说,可以将自定义的 UUID 作为异步调用的一个输入参数,然后使用 UUID 查询接口(如 GetAccountLog 接口)获取函数执行结果。这个 UUID 可以是随机生成的字符串,也可以是其他类型的唯一标识符,只要能够保证在应用中唯一即可。

    异步调用的结果可能不是实时返回的,而是需要一段时间才能获取到,因此在使用异步调用时需要根据具体情况设置相应的超时时间。同时,在使用客户端轮询方式查询函数执行结果时,也需要注意控制查询的频率,避免频繁查询导致调用频率过高的问题。

    2023-05-23 12:00:51
    赞同 展开评论 打赏
  • 在阿里云函数计算(Function Compute)中,异步执行函数后,可以通过异步调用的方式获取函数计算的结果。以下是一种基本的实现方式:

    1、在异步执行函数时,获取到该异步调用的 RequestId。

    import com.aliyun.fc.client.AliyunFcClient;
    import com.aliyun.fc.request.InvokeFunctionRequest;
    import com.aliyun.fc.response.InvokeFunctionResponse;
    
    // 创建阿里云函数计算客户端实例
    AliyunFcClient fcClient = new AliyunFcClient();
    
    // 构造异步调用请求
    InvokeFunctionRequest request = new InvokeFunctionRequest();
    request.setFunctionName("<your-function-name>");
    request.setAsync(true);
    
    // 异步调用函数,并获取异步调用的 RequestId
    InvokeFunctionResponse response = fcClient.invokeFunction(request);
    String requestId = response.getRequestId();
    

    2、使用获取到的 RequestId,通过同步调用的方式获取函数计算的结果。

    import com.aliyun.fc.request.GetExecutionResultRequest;
    import com.aliyun.fc.response.GetExecutionResultResponse;
    
    // 构造获取执行结果的请求
    GetExecutionResultRequest getResultRequest = new GetExecutionResultRequest();
    getResultRequest.setRequestId(requestId);
    
    // 同步调用获取执行结果
    GetExecutionResultResponse getResultResponse = fcClient.getExecutionResult(getResultRequest);
    
    // 获取函数计算的执行结果
    String result = getResultResponse.getResult();
    
    2023-05-16 17:07:35
    赞同 展开评论 打赏
  • 要开任务模式,然后有api可以查 https://help.aliyun.com/document_detail/62921.html?spm=a2c4g.50980.0.i1

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-05-15 18:30:24
    赞同 展开评论 打赏
  • 函数计算支持异步执行,并且提供了获取异步执行结果的方法。其中,在函数完成异步执行后,可以通过调用异步调用的 GetAsyncResult API 来获取执行结果。该 API 的使用方法如下:

    1. 参数说明:

    serviceName:函数计算服务名。在函数计算服务的控制台中可以看到。

    qualifier:调用函数时使用的版本号或者别名。默认值是 LATEST。

    uuid:异步调用的 UUID。通过异步调用即可获得。

    params:参数。为 JSON 格式的字符串。

    1. 执行代码示例:
    import json
    from aliyunsdkfc.client import Client
    from aliyunsdkfc.request import GetAsyncResultRequest
    
    # 配置访问密钥
    access_key_id = '<your_access_key_id>'
    access_key_secret = '<your_access_key_secret>'
    account_id = '<your_account_id>'
    region = '<your_region>'
    
    # 函数计算服务名、函数名和事件源名称
    service_name = '<your_service_name>'
    
    # 初始化客户端
    client = Client(
        access_key_id=access_key_id,
        access_key_secret=access_key_secret,
        account_id=account_id,
        region=region
    )
    
    # 获取异步调用结果
    def get_result(service_name,uuid):
        request = GetAsyncResultRequest(serviceName=service_name, asyncId=uuid)
        response = client.get_async_result(request)
        response_content = json.loads(response.content)
        if response_content['status'] == "SUCCESS":
            result_json = response_content['result']
            # 处理返回结果
            ...
        else:
            print("获取结果失败")
    
    

    需要注意的是,异步返回结果失效时间为 24 小时,如果异步调用 UUID 超过 24 小时未被取回,结果将会自动清空。如果需要长期保留异步返回结果,可以将结果存储到外部存储服务中。

    2023-05-15 16:17:28
    赞同 展开评论 打赏
  • 热爱开发

    您好,函数计算支持异步执行,并且可以使用RequestId来获取函数执行的状态和结果。但是,函数计算不支持直接通过UUID来获取结果。

    在异步调用时,函数计算会返回一个RequestId,您可以使用这个RequestId来查询函数执行的状态和结果。具体的方法如下:

    调用异步函数时,可以通过指定InvocationType参数为Event来指定异步执行方式,例如: const fc = require('@alicloud/fc2');

    const client = new fc.Client({ accessKeyID: '', accessKeySecret: '', region: '', });

    client.invokeFunction('', { event: 'hello world' }, { invocationType: 'Event' }); 获取函数执行状态和结果时,可以调用getExecution API,例如: const result = await client.getExecution('', ''); console.log(result); 其中,getExecution API 返回的结果包括函数的状态、日志和返回值等信息。

    需要注意的是,在使用异步调用时,函数计算不保证函数一定能够执行成功,因此在实际应用中需要进行错误处理和重试。

    2023-05-15 15:03:55
    赞同 展开评论 打赏
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    是的,您可以通过调用 get_result 方法来获取函数计算的结果。该方法接受一个参数 callback,用于指定回调函数。当计算结果可用时,函数计算会调用回调函数并将结果作为参数传递给它。

    以下是一个示例代码:

    
    import uuid
    
    # 定义一个异步函数
    async def my_function(input):
        # 执行一些异步操作
        result = await some_async_operation(input)
        return result
    
    # 创建一个函数计算任务并提交到云端
    task_id = await function_compute.submit(my_function, input_data)
    
    # 打印任务ID
    print("Task ID:", task_id)
    
    # 等待一段时间后获取结果
    while True:
        try:
            # 通过UUID获取结果
            result_uuid = str(uuid.uuid4())
            callback = functools.partial(function_compute.get_result, result_uuid)
            # 调用get_result方法获取结果
            result = await function_compute.get_result(callback)
            print("Result:", result)
            break
        except Exception as e:
            print("Failed to get result:", e)
            time.sleep(1)
    
    
    

    在上面的示例中,我们首先定义了一个异步函数 my_function,然后使用 function_compute.submit 方法创建了一个函数计算任务并提交到云端。接着,我们通过 str(uuid.uuid4()) 生成一个UUID作为结果的唯一标识符,并将其传递给 function_compute.get_result 方法以获取结果。最后,我们在控制台输出结果并退出循环。

    2023-05-15 13:54:04
    赞同 展开评论 打赏
滑动查看更多
问答分类:
问答标签:
问答地址:
相关产品:

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    Hologres Serverless之路:揭秘弹性计算组 立即下载
    Serverless开发平台: 让研发效能再提升 立即下载
    Serverless 引领云上研发新范式 立即下载