---
title: "新しいリクエストスロットリング戦略を作成する"
slug: "create-a-new-request-throttling-strategy"
abstract: "カスタム戦略の実装方法"
---
# 新しいリクエストスロットリング戦略を作成する

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

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

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

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

-   */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](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/93/sitecore-experience-manager/images/Create_a_new_request_throttling_strategy-Picture_17-rId9-595221051.png)
    

## 戦略クラスを実装する

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

1.  Visual Studioではプロジェクトを作成し、DataThrottleStrategy基底クラスから継承するストラテジークラスを作成します。
    
2.  以下の3つの方法を実施しなければなりません。
    
    -   *InitCore*– すべての初期化ステップをここに配置します(例えば、戦略のプロパティを戦略アイテムフィールドに割り当てるなど)。
    -   *VerifyCore*– リクエストが許可されるかどうかを指定するロジックをここに載せます。内部状態は*ThrottleStrategyData*クラスの**CustomData**フィールドに保存できます。このクラスのインスタンスはメソッドの引数として渡されます。
    -   *CommitCore*– すべての戦略がリクエストを許可し、必要に応じて内部状態を変更できる場合にこのメソッドを使用。
3.  [新しい戦略を登録](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-manager/dependency-injection.html "Dependency injection") し、インターフェースを実装するクラスを作成して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](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/93/sitecore-experience-manager/images/2-Create_a_new_request_throttling_strategy-Picture_18-rId10-1606959239.png)
    

これで [説明した方法で](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-manager/throttle-requests.html "Throttle requests")戦略を適用できます。