リクエストとレスポンスのストリーミング

このトピックで説明する内容

このトピックでは、以下のことを説明します。

  • Apigee Edge でのリクエストやレスポンスのストリーミング
  • リクエストやレスポンスのストリーミングを使用すべき状況
  • リクエストやレスポンスのストリーミングを有効にする方法

リクエストやレスポンスのストリーミングとは

デフォルトでは HTTP ストリーミングは無効です。HTTP リクエストおよびレスポンスのペイロードはメモリ内のバッファに書き込まれてから、API プロキシ パイプラインによって処理されます。この動作は、ストリーミングを有効にすることで変更できます。ストリーミングを有効にすると、リクエストとレスポンスのペイロードが変更なしにクライアント アプリ(レスポンスの場合)やターゲット エンドポイント(リクエストの場合)にストリーミングされます。

ストリーミングを有効にすべき状況

API プロキシが非常に大きなリクエストやレスポンスを処理する場合は(サイズの上限については、後述の「ストリーミングについて他に知っておくべきこと」を参照)、ストリーミングを有効にすることを検討してください。たとえば、Comet 風のアプリケーションのように、出力を長時間にわたって返す Node.js アプリケーションが Edge に展開されている場合に、ストリーミングによるレスポンス フローを有効にすることが考えられます。また、きわめて大量のデータを受け入れたり返したりするアプリケーションがある場合も、ストリーミングを有効にすることを検討してください。

ストリーミングについて他に知っておくべきこと

メッセージ ペイロード サイズには以下の制約があります。このサイズを超えると、protocol.http.TooBigBody エラーが発生します。

  • Edge Cloud では 10 MB
  • Edge for Private Cloud では 10 MB

Edge for Private Cloud の展開では、この値を変更できます。本運用に展開する前に変更内容を必ずテストしてください。

  • 4.16.01 以前の Edge for Private Cloud リリースの場合:

    すべての Message Processor で、http.properties ファイルを編集して、HTTPResponse.body.buffer.limit パラメータの限度を上げ、Message Processor を再起動します。
  • Edge for Private Cloud リリース 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. Message Processor を再起動します。
      > /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor restart

    4. すべての Message Processor に対して繰り返し行います。

リクエストやレスポンスのストリーミングを有効にする方法

リクエストのストリーミングを有効にするには、request.streaming.enabled プロパティをプロキシ バンドルの ProxyEndpoint 定義と TargetEndpoint 定義に追加し、true に設定する必要があります。レスポンスのストリーミングを有効にする場合も同様に、response.streaming.enabled プロパティを設定する必要があります。

プロキシの構成ファイルの場所は、プロキシの管理 UI の [Develop] ビューで確認できます。ローカルで開発している場合、定義ファイルは 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 プロキシの使用を参照してください。

ストリーミングを使用するサンプル プロキシには以下があります。

  • ストリーミング - HTTP ストリーミング用に構成された API プロキシのデモです。