创建持久函数以返回失败 - 当活动失败时

问题描述 投票:0回答:1

我的 Azure Function App 遇到了由管道触发的问题。最初,我的函数应用程序总是会返回成功代码,即使其中一项活动失败。为了解决这个问题,我修改了代码来检查活动的状态,如果失败则返回失败代码。

这是原始代码:

@myApp.route(route="orchestrators/xml_remit_gen", methods=["POST"])
@myApp.durable_client_input(client_name="client")
async def http_xml_remit_gen(req: func.HttpRequest, client: df.DurableOrchestrationClient):
    try:
        req_body = req.get_json()
        set_configurations(req_body, False)
        # Assuming no additional arguments are required for start_new
        instance_id = await client.start_new("xml_remit_gen_orchestrator", None, req_body)
        response = client.create_check_status_response(req, instance_id)
        return response
    except Exception as e:
        error_message = str(e)
        return func.HttpResponse(error_message, status_code=500)

这是修改后的代码:

@myApp.route(route="orchestrators/xml_remit_gen", methods=["POST"])
@myApp.durable_client_input(client_name="client")
async def http_xml_remit_gen(req: func.HttpRequest, client: df.DurableOrchestrationClient):
    try:
        req_body = req.get_json()
        set_configurations(req_body, False)
        # Assuming no additional arguments are required for start_new
        instance_id = await client.start_new("xml_remit_gen_orchestrator", None, req_body)
         while True:
                 status = await client.get_status(instance_id)
                 if status.runtime_status in [df.OrchestrationRuntimeStatus.Failed, df.OrchestrationRuntimeStatus.Completed]:
                     break  
                 await asyncio.sleep(1)  

         if status.runtime_status in [df.OrchestrationRuntimeStatus.Failed, 'Failed']:
             response = client.create_check_status_response(req, instance_id)
             return client._create_http_response(500, status.output)
            
        response = client.create_check_status_response(req, instance_id)
        return response
    except Exception as e:
        error_message = str(e)
        return func.HttpResponse(error_message, status_code=500)

但是,进行此更改后,管道将在 4 分钟后自动超时。最初我遇到了这个问题,这促使我考虑使用 Azure Durable Functions,但我再次遇到了同样的问题。如何解决此超时问题并确保函数应用根据活动状态返回适当的成功或失败代码?

azure azure-functions azure-pipelines azure-durable-functions
1个回答
0
投票

您还没有分享管道如何触发您的函数。假设您的函数是通过对

Invoke Azure Function
进行管道资源使用检查来触发的,其中
Completion event
作为callback,当管道请求使用资源时,检查操作将触发您的函数并等待回调请求发送回Azure从您的职能中进行 DevOps。如果检查在
Timeout
中设置的
Control options
设置中配置的时间限制内未能收到回调请求,则检查将失败。

此外,我没有看到从您的函数发送回 Azure DevOps 的任何回调请求,该请求应针对

AuthToken
进行身份验证并指定
taskId
jobId
result
。请检查异步检查并更新您的函数以调用Azure DevOps。

© www.soinside.com 2019 - 2024. All rights reserved.