【问题标题】:Poll a Durable Function inside an Azure API Management request在 Azure API 管理请求中轮询持久函数
【发布时间】:2020-05-02 02:41:49
【问题描述】:
是否可以在 APIM 请求中进行内部短轮询,然后使用同步响应进行响应?
流程是这样的:
1. APIM 收到请求
2. APIM 触发持久函数编排。
3. APIM 等待并轮询持久函数响应(通过策略?)
4. APIM 以实际结果响应
对于 API 使用者,这将是一个请求。
这是一种常见的模式吗?还是只向 API 使用者提供 202 响应轮询 URL 更好?我预计该请求只需要几秒钟到一分钟左右的时间。
有没有我还没有考虑过的更标准的方法?
【问题讨论】:
标签:
polling
azure-api-management
long-polling
azure-durable-functions
【解决方案1】:
您希望如何将 API 呈现给消费者是主观的。
- 如果您希望前端用户轮询 API,那么 202 Accepted 响应与位置标头中的轮询 url 是方式。
- 如果您想将您的 API 伪装成同步 API,您必须在 APIM 策略中实现轮询模式本身。为此,请参阅以下帖子
Use API-M To Mask Async APIs When Moving Implementation to Logic Apps,即使它属于逻辑应用,您也可以为任何异步 API 实现相同的模式
摘自链接:
<outbound>
<base />
<retry condition="@(((IResponse)context.Variables["var"]).StatusCode == 202)" count="10" interval="30">
<send-request mode="new" response-variable-name="var" ignore-error="false">
<set-url>@(context.Response.Headers["location"][0])</set-url>
<set-method>GET</set-method>
</send-request>
</retry>
<return-response response-variable-name="var" />
</outbound>
正如我之前指出的,这实际上取决于您希望如何将 API 呈现给消费者。两种模式都有效。