新しいリクエストスロットリング戦略を作成する

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

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

新しいリクエストスロットリング戦略を作成できます。以下は以下の通りです:

  • 戦略項目テンプレートを作成しましょう
  • 戦略クラスを実装する
  • 戦略を適用してください

戦略項目テンプレートを作成しましょう

戦略アイテムテンプレートを追加するには:

  • /sitecore/templates/System/Services/Throttleの*/System/Templates/Templateテンプレートを使って新しいテンプレートを作成します。フィールドを追加し、ベーステンプレートを/sitecore/templates/System/Services/Throttle/Strategy*テンプレートに設定します。

  • 挿入ルールを設定するには、作成したテンプレートを*/sitecore/templates/System/Services/Throttle/Strategy Folder/__Standard Values*項目のMasters欄にリストに追加してください。

  • 作成したテンプレートの標準値を追加し、フィールドのデフォルト値を設定します:

    The standard values of the new template

戦略クラスを実装する

戦略クラスを作成するには:

  1. Visual Studioではプロジェクトを作成し、DataThrottleStrategy基底クラスから継承するストラテジークラスを作成します。

  2. 以下の3つの方法を実施しなければなりません。

    • InitCore– すべての初期化ステップをここに配置します(例えば、戦略のプロパティを戦略アイテムフィールドに割り当てるなど)。
    • VerifyCore– リクエストが許可されるかどうかを指定するロジックをここに載せます。内部状態はThrottleStrategyDataクラスのCustomDataフィールドに保存できます。このクラスのインスタンスはメソッドの引数として渡されます。
    • CommitCore– すべての戦略がリクエストを許可し、必要に応じて内部状態を変更できる場合にこのメソッドを使用。
  3. 新しい戦略を登録 し、インターフェースを実装するクラスを作成してIServicesConfigurator 、servicesセクションをパッチして以下を追加してください:

  4. バイナリアセンブリファイルをSitecoreインスタンスのbinフォルダに入れてください。

以下は戦略クラスの実装例です。

using System; using System.Globalization; using Sitecore.Diagnostics; using Sitecore.Services.Infrastructure.Throttle; using Sitecore.Services.Infrastructure.Throttle.Strategies; using Microsoft.Extensions.DependencyInjection; using Sitecore.DependencyInjection; namespace CustomService.Throttle.Strategies { public class CustomStrategyInjections : IServicesConfigurator    {         public void Configure(IServiceCollection serviceCollection)         {             serviceCollection.AddTransient();.         }     } public class MyCustomStrategy : DataThrottleStrategy { private int _customField; private int _result; private MyCustomData _myCustomData; public MyCustomStrategy(ThrottleStrategyDataStorage storage) : base(storage) { } protected override void InitCore(ThrottleInitializationContext throttleInitializationContext) { // get parameters from item Assert.ArgumentNotNull(throttleInitializationContext.StrategyItem, nameof(throttleInitializationContext.StrategyItem)); _customField = int.Parse(throttleInitializationContext.StrategyItem"{D55875C2-D5CA-48D9-8FBD-8092887F980F}", CultureInfo.InvariantCulture); Assert.ArgumentCondition(_customField > 0, nameof(_customField), "Custom parameter is lower or equal 0"); } protected override ThrottleStrategyResult VerifyCore(ThrottleStrategyData throttleStrategyData) { _myCustomData = throttleStrategyData.CustomData as MyCustomData; if (_myCustomData != null) { _result = _myCustomData.Rnd.Next(0, _customField); // if random number is in second half of 0.._customField span then the request is not passed if (_result > _customField / 2) { return new ThrottleStrategyResult { Passed = false, RetryAfter = 5 }; } } return ThrottleStrategyResult.PassedResult; } protected override void CommitCore() { _myCustomData.Result = _result; } } internal class MyCustomData { internal readonly Random Rnd = new Random(); internal int Result; } }

戦略を適用してください

戦略を適用するには:

  • 作成した戦略テンプレートから戦略アイテムを作成してください:

    A strategy item

これで 説明した方法で戦略を適用できます。

この記事を改善するための提案がある場合は、 お知らせください!