Azure 逻辑应用 HTTP 请求 500

Posted

技术标签:

【中文标题】Azure 逻辑应用 HTTP 请求 500【英文标题】:Azure Logic App HTTP request 500 【发布时间】:2017-01-21 22:31:07 【问题描述】:

我是 Azure 逻辑应用程序的新手,所以这个示例可能看起来没什么用,但它只是为了学习一些基本的 Azure 逻辑。

我有一个简单的 HTTP 监听器(当收到一个 HTTP 请求时) 比它应该向某个服务发送另一个 HTTP GET 请求并向第一个调用者发送响应。 它看起来像这样: http://imgur.com/a/9fpfu

现在一切正常,直到我发送错误数据或逻辑应用程序从 HTTP 请求中收到 500 HTTP 错误。

逻辑应用程序在 HTTP 请求中挂起大约 1 分钟并失败。 之后的响应永远不会发送。

如何将逻辑应用返回的响应转发给请求逻辑应用的请求者?

【问题讨论】:

【参考方案1】:

默认情况下,逻辑应用程序会重试任何失败的请求 4 次,因此当 http 服务返回错误 5xx 时,您会看到运行时间增加。您可以使用自定义重试策略配置此行为。查看更多https://azure.microsoft.com/en-us/updates/customizable-retry-policies-in-logic-apps/

默认情况下,逻辑应用步骤依赖于任何相关操作的成功。这会导致在 http 操作失败时跳过您的响应操作。

你有几个选择来解决这个问题:

    在代码视图中,您可以更新runAfter 属性,以便无论http 操作是否成功,操作都会运行

    "runAfter":  "Condition": [ "Succeeded", "Failed" ] 
    

    在 http 操作的 http 状态代码上向逻辑应用添加条件,然后为每个案例设置专用的 Response 操作

【讨论】:

你的意思是link 对。尝试添加 retryPolicy 时出现以下错误:在“FlowTemplateAction”类型的对象上找不到成员“retryPolicy”。路径'properties.definition.actions.HTTP.retryPolicy',这是我的代码(条件已经成功并且失败):pastebin.com/igfprKFT 同样对于 4xx 错误它工作正常,只有 5xx 需要 1 分钟才能超时。 imgur.com/a/0nBPK 超时后不会触发响应 看起来您正在直接在操作下指定 retryPolicy。它需要在输入属性下。关于故障,逻辑应用仅重试间歇性故障(因此 5xx 状态码),4xx 状态码被视为确定性故障,因此不会重试 我可以覆盖 4 次重新运行尝试的行为吗?逻辑应用设计器中是否有地方可以做,还是我必须编辑 json?【参考方案2】:

您可以将Http操作的重试策略和超时设置更新为

enter image description here

【讨论】:

请添加您所链接图片的描述。【参考方案3】:

如您所知,500 是未知错误,因此 logicapp 引擎会停止处理任何即使在重试后仍会继续抛出 500 的操作。对于这种特定情况,您需要设置 logicapp 诊断规则“操作失败”/“运行失败”。在规则中,您可以配置发送电子邮件和/配置 webhook 以响应事件

【讨论】:

当我添加另一个响应没有任何变化时,我的代码也适用于 4xx 错误但不适用于 5xx... 如您所知,500 是一个未知错误,因此即使在重试之后,logicapp 引擎也会停止处理任何继续抛出 500 的操作。对于这种特定情况,您需要设置 logicapp 诊断规则“操作失败”/“运行失败”。在规则中,您可以配置发送电子邮件和/配置 webhook 以响应事件。

以上是关于Azure 逻辑应用 HTTP 请求 500的主要内容,如果未能解决你的问题,请参考以下文章

Http 请求失败:在 Azure 逻辑应用中达到超时

Azure 逻辑应用程序 - 获取 500 内部服务器错误的响应正文

逻辑应用中的 Webhook 与 Http 请求

如何为POST,GET等多个Http请求创建单一逻辑应用程序

如何在 Azure 逻辑应用中将 blob 文件内容转换为 .docx

从 Azure Python HTTP 触发函数调用 Azure 逻辑应用