1. Sitecore.Services.クライアント

新しい要求調整戦略を作成する

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

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

新しい要求調整戦略を作成できます。しなきゃいけません:

  • 戦略品目テンプレートの作成

  • ストラテジークラスの実装

  • 戦略を適用する

戦略品目テンプレートの作成

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

  • /System/Templates/Templateテンプレートを使用して、/sitecore/templates/System/Services/Throttleの下に新しいテンプレートを作成します。フィールドを追加し、基本テンプレートを/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セクションにパッチを適用して以下を追加します。

    <configurator type="CustomService.Throttle.Strategies.CustomStrategyInjections, YourDLLName" />
  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<MyCustomStrategy>();.
        }
    }
    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

これで、説明されている方法で戦略を適用できます。

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