流式传输请求和响应

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

本主题将学习的内容

阅读本主题后,您将了解以下内容:

  • Apigee Edge 中的请求和响应流式传输是什么
  • 何时使用请求和响应流式传输
  • 如何启用请求和响应流式传输

请求和响应流式传输是什么?

默认情况下,HTTP 流式传输处于停用状态,HTTP 请求和响应载荷会写入内存中的缓冲区,随后由 API 代理流水线进行处理。您可以通过启用流式传输来更改此行为。启用流式传输后,系统将流式传输请求和响应载荷,而无需修改客户端应用(对于响应)和目标端点(对于请求)。

何时应启用流式传输?

如果您的 API 代理处理非常大的请求和/或响应(如需了解大小限制,请参阅下文中的我还需要了解流式传输的其他哪些内容?),您可能需要启用流式处理。

我还需要了解流式传输的其他哪些内容?

在 Edge Cloud 和私有云中,即使启用了流式传输,消息载荷大小上限也为 10 MB。在非流式传输的请求和响应中,超过该大小会导致 protocol.http.TooBigBody 错误。

在用于私有云部署的 Edge 中,您可以修改非流式请求/响应的大小限制。请务必先进行测试,然后再将更改部署到生产环境。

  • 对于 4.16.01 之前的 Private Cloud 版本

    在所有消息处理器上,修改 http.properties 文件以增加 HTTPResponse.body.buffer.limit 参数中的限制,然后重启消息处理器。
  • 对于适用于 Private Cloud 的 Edge 4.16.01 及更高版本
    1. 修改文件 /<inst_root>/apigee/customer/application/message-processor.properties。 如果该文件不存在,请创建一个。

    2. message-processor.properties 中设置 conf_http_HTTPResponse.body.buffer.limit 属性。例如:
      conf_http_HTTPResponse.body.buffer.limit=5m

    3. 重启消息处理器:
      > /<inst_root>/apigee/apigee-service/bin/apigee-serviceedge-message-processor restart

    4. 针对所有消息处理器重复上述操作。

如何启用请求和响应流式传输

如需启用请求流式传输,您需要将 request.streaming.enabled 属性添加到代理软件包中的 ProxyEndpoint 和 TargetEndpoint 定义,并将其设置为 true。同样,设置 response.streaming.enabled 属性以启用响应流式传输。

您可以在代理的“开发”视图的管理界面中找到这些配置文件。如果您是在本地开发,则这些定义文件位于 apiproxy/proxiesapiproxy/targets 中。

以下示例展示了如何在 TargetEndpoint 定义中启用请求和响应流式传输。

<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="response.streaming.enabled">true</Property>
      <Property name="request.streaming.enabled">true</Property>
      <Property name="supports.http10">true</Property>
      <Property name="request.retain.headers">User-Agent,Referer,Accept-Language</Property>
      <Property name="retain.queryparams">apikey</Property>
    </Properties>
  </HTTPTargetConnection>
</TargetEndpoint>

以下示例展示了如何在 ProxyEndpoint 定义中启用响应和请求流式传输:

<ProxyEndpoint name="default">
  <HTTPProxyConnection>
    <BasePath>/v1/weather</BasePath>
    <Properties>
      <Property name="allow.http10">true</Property>
      <Property name="response.streaming.enabled">true</Property>
      <Property name="request.streaming.enabled">true</Property>
    </Properties>
  </HTTPProxyConnection>
</ProxyEndpoint>

如需详细了解如何配置端点定义,请参阅端点属性参考

相关代码示例

GitHub 上的 API 代理示例易于下载和使用。如需了解如何下载和使用示例,请参阅使用 API 代理示例

具备流式传输功能的示例代理包括: