AEM パブリッシュでのアウトバウンド API リクエストタイムアウトの解決
この記事では、外部APIから大規模なデータセットを取得する際のAdobe Experience Manager(AEM)パブリッシュの断続的なタイムアウトの問題に対処する方法と、プラットフォームレベルのタイムアウトエラーを回避するための方法について説明します。
説明 description
環境
Adobe Experience Manager(AEM)公開(AEM as a Cloud Serviceを含むすべてのバージョン)
症状
- AEM パブリッシュが外部APIから大きなデータセット(在庫データなど)を取得すると、断続的なタイムアウトが発生します。
- 外部APIは、プラットフォームレベルのタイムアウトよりも時間がかかり、最初のバイトが返されます。その結果、ServiceUnavailableまたは最初のバイトタイムアウトエラーが発生します。
- これらのタイムアウトは、データ取得プロセスでエラーを引き起こします。
原因
AEM Publishでは、アウトバウンド HTTP接続に対してプラットフォームレベルのタイムアウトが適用されます。 外部APIの応答が遅い場合、AEM パブリッシュからの同期要求がこのタイムアウトを超え、エラーが発生してデータ取得に失敗します。
解決策 resolution
問題を解決するには、次の手順に従います。
-
AEM パブリッシュコードでHTTP クライアント設定を確認します。
- 外部APIへのアウトバウンド HTTP リクエストの明示的な接続および読み取りタイムアウトを設定します。 コードが独自のタイムアウトを指定しない場合、プラットフォームはグローバルタイムアウトを適用します(例:10秒、読み取り60秒)。
-
長時間実行される同期呼び出しを避けるために、統合を最適化します。
-
各API呼び出しがより小さなデータセットを処理し、プラットフォームのタイムアウトウィンドウ内で適切に完了するように、インベントリ取得リクエストをバッチまたはページ化します。
-
例えば、1回の呼び出しですべての在庫項目をリクエストする代わりに、小さいページ(例:500または 1000 件の呼び出し)をリクエストし、必要に応じて結果を集計します。
-
-
可能な限り、在庫データのキャッシュを実装するか、事前に計算します。
- 頻繁にアクセスされる在庫データをキャッシュに保存するか、オフピーク時に事前計算することで、大規模なAPI呼び出しを繰り返す必要性を低減します。
-
長時間実行している在庫のプルを非同期処理に移行します。
- ページリクエストをサードパーティ APIの応答を待つ代わりに、トリガーインベントリを非同期的に更新し(スケジュールされたジョブやバックグラウンドワーカーを介して)、キャッシュされたデータまたは事前にフェッチされたデータをエンドユーザーに提供します。
-
プラットフォームが許可するよりも長いタイムアウトが必要な場合は、同期による長時間実行の呼び出しを避けるために、統合を再設計します。 プラットフォームレベルのタイムアウトの増加はサポートされていません。
-
これらの変更を行った後、インベントリの取得が正常に完了し、タイムアウトエラーが発生しなくなったことを確認します。