gpt4 book ai didi

禁用函数应用程序时,Azure API 管理不发送重试

转载 作者:行者123 更新时间:2023-12-02 23:55:37 28 4
gpt4 key购买 nike

我已配置 API 管理策略,以便在第一个区域遇到错误时重试第二个区域。

但是,当我禁用位于悉尼的主要功能应用程序时,应用程序见解中没有记录重试 - 只有原始失败的请求。 Melbourne 函数应用中没有记录任何函数调用。

我尝试了很多不同的配置。两个区域功能应用程序都运行良好。

我已经复制了下面的代码,有什么我遗漏或不理解的吗?

提前致谢

API 政策

<policies>
<inbound>
<base />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<int>('RetryCounter', 0) == 0)">
<set-backend-service base-url="{{syndey-function-app}}" />
</when>
<otherwise>
<set-backend-service base-url="{{melbourne-function-app}}" />
</otherwise>
</choose>
</inbound>
<backend>
<retry count="1" interval="0" first-fast-retry="true" condition="@(
context.Response.StatusCode > 400
)">
<set-variable name="RetryCounter" value="@(context.Variables.GetValueOrDefault<int>('RetryCounter', 0) + 1)" />
<forward-request buffer-request-body="true" timeout="15"/>
</retry>
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>

403错误响应

<h1 id="unavailable">Error 403 - This web app is stopped.</h1>
<p id="tryAgain">
The web app you have attempted to reach is currently stopped and does not
accept any requests. Please try to reload the page or visit it again soon.
</p>

<p id="toAdmin">
If you are the web app administrator, please find the common 403 error
scenarios and resolution <a href="https://go.microsoft.com/fwlink/?linkid=2095007"
target="_blank">here</a>. For further troubleshooting tools and recommendations,
please visit <a href="https://portal.azure.com/">Azure Portal</a>.
</p>

最佳答案

由于保存时出错,我必须将单引号替换为双引号:

context.Variables.GetValueOrDefault<int>('RetryCounter', 0) => context.Variables.GetValueOrDefault<int>("RetryCounter", 0)

为了测试,我创建了两个模拟服务:

返回状态码200:
https://rfqapiservicey27itmeb4cf7q.azure-api.net/echo/200/test

返回状态码403:
https://rfqapiservicey27itmeb4cf7q.azure-api.net/echo/403/test

retry backend 中的部分部分永远不会返回到 inbound部分。所以choose条件只是在一开始就受到了影响。

因此,choose条件必须移至 backend部分。

<policies>
<inbound>
<base />
<set-backend-service base-url="https://rfqapiservicey27itmeb4cf7q.azure-api.net/echo/403" />
<!--
<set-backend-service base-url="{{syndey-function-app}}" />
-->
</inbound>
<backend>
<retry count="1" interval="0" first-fast-retry="true" condition="@(
context.Response.StatusCode > 400
)">
<set-variable name="RetryCounter" value="@(context.Variables.GetValueOrDefault<int>("RetryCounter", 0) + 1)" />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<int>("RetryCounter", 0) > 1)">
<set-backend-service base-url="https://rfqapiservicey27itmeb4cf7q.azure-api.net/echo/200" />
<!--
<set-backend-service base-url="{{melbourne-function-app}}" />
-->
</when>
</choose>
<forward-request buffer-request-body="true" timeout="15" />
</retry>
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>

enter image description here

我的示例操作按预期执行:

https://rfqapiservicey27itmeb4cf7q.azure-api.net/sample/test

enter image description here

第一个点击backend请求403资源: enter image description here

此请求失败,retry策略在 backend 中设置 200部分: enter image description here

第二个请求成功时将返回200并保留backend部分:

enter image description here

关于禁用函数应用程序时,Azure API 管理不发送重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72614610/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com