如何在 API 管理中禁用响应缓冲并强制立即刷新?
How do I disable response buffering in API Management and force immediate flush?
我有一个 http 触发的 Azure 函数,它带有一个返回 json 对象集合的固定响应。每 10 个对象刷新一次响应,中间有 2 秒的延迟。
当直接将此端点调用到函数时,我立即收到刷新的响应,没有缓冲 - 10 个完整的对象,延迟 2 秒。
当我通过 Azure 的 APIM 调用此端点时,响应不再立即刷新。我得到了部分对象,并且响应似乎正在命中一个缓冲区,该缓冲区仅在特定时间或大小后才被刷新。
如何强制 APIM 不缓冲响应?
当您 forward request 时,设置 buffer-request-body="false"
将禁用缓冲区请求。
<forward-request timeout="time in seconds" follow-redirects="false | true" buffer-request-body="false" fail-on-error-status-code="false | true"/>
另外,不要使用 <set-body>
政策。 set-body 的内部文本缓冲在内存流中并传递给接收者。
我能够从 Microsoft 获得关于禁用响应缓冲的未记录属性的响应。尚未对此进行广泛测试,但似乎有效。
<backend>
<forward-request buffer-response="false" />
</backend>
我有一个 http 触发的 Azure 函数,它带有一个返回 json 对象集合的固定响应。每 10 个对象刷新一次响应,中间有 2 秒的延迟。
当直接将此端点调用到函数时,我立即收到刷新的响应,没有缓冲 - 10 个完整的对象,延迟 2 秒。
当我通过 Azure 的 APIM 调用此端点时,响应不再立即刷新。我得到了部分对象,并且响应似乎正在命中一个缓冲区,该缓冲区仅在特定时间或大小后才被刷新。
如何强制 APIM 不缓冲响应?
当您 forward request 时,设置 buffer-request-body="false"
将禁用缓冲区请求。
<forward-request timeout="time in seconds" follow-redirects="false | true" buffer-request-body="false" fail-on-error-status-code="false | true"/>
另外,不要使用 <set-body>
政策。 set-body 的内部文本缓冲在内存流中并传递给接收者。
我能够从 Microsoft 获得关于禁用响应缓冲的未记录属性的响应。尚未对此进行广泛测试,但似乎有效。
<backend>
<forward-request buffer-response="false" />
</backend>