アンチパターン: ストリーミングが有効な場合にリクエスト / レスポンス ペイロードにアクセスする
Edge のデフォルトの動作では、HTTP リクエスト / レスポンスのペイロードは、API プロキシ内の各ポリシーによって処理される前に、いったんメモリ内バッファに保存されます。
ストリーミングを有効にすると、リクエストとレスポンスのペイロードは無変更のままクライアント アプリ(レスポンスの場合)やターゲット エンドポイント(リクエストの場合)にストリーミングされます。アプリケーションで大きなペイロードをやり取りする場合や、長時間にわたってチャンク形式でデータを返すアプリケーションがある場合には、ストリーミング機能が特に便利です。
アンチパターン
ストリーミングを有効にした状態でリクエスト / レスポンス ペイロードにアクセスすると、Edge がデフォルトのバッファリング モードに戻ります。
図 1: ストリーミングを有効にした状態でリクエスト / レスポンス ペイロードにアクセスする
上の図では、リクエスト ペイロードから変数を抽出し、JSONToXML ポリシーを使って JSON レスポンス ペイロードを XML に変換しようとしています。この結果、Edge のストリーミングが無効になります。
影響
- ストリーミングが無効になると、データ処理のレイテンシが増大する可能性があります。
- Message Processor でヒープメモリの使用率が上昇するか、OutOfMemory エラーが発生する可能性があります。この原因はメモリ内バッファの使用であり、特にリクエスト / レスポンス ペイロードが大きな場合は、このような状況に陥りやすくなります。
ベスト プラクティス
- ストリーミングを有効にしている場合は、リクエスト / レスポンス ペイロードにアクセスしないでください。
関連情報
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2020-07-09 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2020-07-09 UTC。"],[],[]]