Experience Edgeへの要求に対する再試行戦略の使用

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

Experience Edge GraphQLエンドポイントはレート制限されており、特定の時間枠内で実行できるリクエストの数に制限があります(現在は1秒あたり80リクエスト)。静的生成 (SSG) が有効になっている大規模なNext.jsアプリケーションをビルドまたはデプロイしているときに、その制限に達し、ビルド プロセスが失敗する可能性があります。

ビルド時に、Next.jsアプリケーションは複数のサービスを通じてエンドポイントに要求を送信します。再試行戦略を実装し、再試行の回数 (グローバルまたはサービスごとに) を指定して、大規模なWebサイトの運用コードを正常に生成できます。

メモ

再試行ストラテジーは、JSSバージョン20 (20.3以降)、およびバージョン21 (21.6.3以降) で使用できます。

再試行回数を設定する

特定の再試行回数をグローバルに、またはサービスごとに構成できます。

再試行回数をグローバルに設定する

Next.js JSSアプリケーションでは、GRAPH_QL_SERVICE_RETRIES環境変数を使用して、GraphQLエンドポイントを使用するすべてのサービス (レイアウト、ディクショナリ、およびエラー ページ サービス) のGraphQL要求の再試行回数を設定します。再試行は、環境変数のデフォルト値に基づいて最初に3に設定されます。すべてのサービスの再試行を無効にするには、その値を0に設定します。

再試行回数をグローバルに設定するには:

  • GRAPH_QL_SERVICE_RETRIES環境変数の値を目的の値に更新します (正の整数、または無効にするには0)。

サービスごとの再試行回数を設定する

サービスごとに異なる再試行回数を指定する場合は、各サービスのretriesオプションの値を正の整数または0に設定するか、サービスごとにカスタム環境変数を定義できます。いずれの場合も、必要に応じて次のファイルに変更を加えます。

  • レイアウト サービスの場合: src/lib/layout-service-factory.ts.

  • ディクショナリ サービスの場合: src/lib/dictionary-service-factory.ts.

  • エラー ページ サービスの場合: src/pages/404.tsxおよびsrc/pages/500.tsx.

手記

環境変数を追加したり、GRAPH_QL_SERVICE_RETRIESの値を変更したりする場合は、デプロイメントプラットフォームやテストパイプラインなどで必要な変更を加えることを忘れないでください。

デフォルトの再試行戦略を変更する

再試行回数を正の整数に設定した場合、影響を受けるサービスは、その数に基づく既定の再試行戦略を使用し、指数関数的なバックオフ/遅延係数は2になります。

デフォルトの再試行戦略では、次の応答ステータスコードが処理されます。

  • 429 - リクエストが多すぎます。

  • 502 - 504 - サーバー エラー。

  • 520 - 524 - エッジ固有のエラー。

また、次の エラーコードもサポートしています。

  • ECONNRESET - 接続リセットエラー

  • ETIMEDOUT - タイムアウトエラー

  • EPROTO - プロトコルエラー

必要に応じて、デフォルトストラテジーのステータスコード、エラーコード、バックオフ/遅延ファクターのリストを変更できます。

デフォルトの再試行方法を変更するには、次のようにします。

  1. サービスファクトリファイル( /src/lib/dictionary-service-factory.tsなど)で、DefaultRetryStrategyクラスをインポートします。

     import {
      DefaultRetryStrategy
    } from '@sitecore-jss/sitecore-jss-nextjs';
  2. GraphQLサービスオプションで、目的のエラーコード、ステータスコード、および遅延係数を指定して、デフォルトの再試行戦略設定を変更します。デフォルト設定が存在しない場合は、最初に追加する必要があります。例えば:

    retries:
      (process.env.GRAPH_QL_SERVICE_RETRIES &&
       parseInt(process.env.GRAPH_QL_SERVICE_RETRIES, 10)) ||
      0,
      retryStrategy: new DefaultRetryStrategy({ statusCodes: [402, 409]; errorCodes: ['ENOTFOUND', 'ETIMEDOUT']; factor: 1})

カスタム戦略の作成

ステータスコード、エラーコード、遅延ファクター以外の再試行戦略をカスタマイズする場合は、RetryStrategyインターフェースに基づいて独自の再試行戦略クラスを実装できます。

このインターフェイスは、エラーと試行に基づいてGraphQLリクエストを再試行するための戦略を定義します。次のように2つの方法を定義します。

  • shouldRetry - リクエストを再試行する必要があるかどうかは、error数とattempt数に基づいて判断します。ブール値を返し、次のパラメーターが必要です。

    パラメーター

    形容

    error 

    GraphQL要求から受信したGraphQLClientError型のエラー。 GraphQLClientError型は、ClientError型とNodeJS.ErrornoException型の両方を処理します。

    retries 

    設定された再試行回数。

    デフォルト: 3

    attempt 

    現在の試行番号。

  • getDelay - 指定されたerror数とattempt数に基づいて、次の再試行までの遅延 (ミリ秒単位) を計算します。これは、次の再試行の遅延をミリ秒単位で返し、次のパラメータが必要です。

    パラメーター

    形容

    error 

    GraphQL要求から受信したGraphQLClientError型のエラー。 GraphQLClientError型は、ClientError型とNodeJS.ErrornoException型の両方を処理します。

    attempt 

    現在の試行番号。

カスタム再試行戦略を作成するには:

  1. Service Factoryファイル ( /src/lib/dictionary-service-factory.tsなど) で、RetryStrategyインターフェイスをインポートします。

    import {
      RetryStrategy,
      ClientError,
      GraphQLClientError,
    } from '@sitecore-jss/sitecore-jss-nextjs';
  2. RetryStrategy型の新しい定数を宣言し、shouldRetryメソッドとgetDelayメソッドを実装します。例えば:

    const customRetryStrategy: RetryStrategy = {
      shouldRetry: (error: GraphQLClientError, retries: number, attempt: number): boolean => true, // Replace this with your own implementation
      getDelay: (error: GraphQLClientError, attempt: number): number => 1000 // Replace this with your own implementation
    };
  3. カスタム再試行戦略をGraphQLサービスオプションに追加します。例えば:

    new GraphQLDictionaryService({
      siteName,
      clientFactory,
      retries:
        (process.env.GRAPH_QL_SERVICE_RETRIES &&
          parseInt(process.env.GRAPH_QL_SERVICE_RETRIES, 10)) ||
        0,
      retryStrategy: customRetryStrategy
    }) 
この記事を改善するための提案がある場合は、 お知らせください!