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

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

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

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

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

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

【问题讨论】:

    标签: azure azure-logic-apps


    【解决方案1】:

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

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

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

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

      "runAfter": { "Condition": [ "Succeeded", "Failed" ] }
      
    2. 在 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 以响应事件。
    猜你喜欢
    • 2019-11-06
    • 2017-07-05
    • 2020-02-05
    • 2021-08-27
    • 2021-07-11
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多