我的 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,但我再次遇到了同样的问题。如何解决此超时问题并确保函数应用根据活动状态返回适当的成功或失败代码?
您还没有分享管道如何触发您的函数。假设您的函数是通过对
Invoke Azure Function
进行管道资源使用检查来触发的,其中Completion event
作为callback,当管道请求使用资源时,检查操作将触发您的函数并等待回调请求发送回Azure从您的职能中进行 DevOps。如果检查在Timeout
中设置的Control options
设置中配置的时间限制内未能收到回调请求,则检查将失败。
此外,我没有看到从您的函数发送回 Azure DevOps 的任何回调请求,该请求应针对
AuthToken
进行身份验证并指定 taskId
、jobId
和 result
。请检查异步检查并更新您的函数以调用Azure DevOps。