エージェントを作成する

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

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

BaseAgentまたはRecurringAgentを継承するエージェントを作成でき、そのエージェントがスケールするかどうかを選択できます。カスタムエージェントを作成する理由には以下があります:

  • エンジン内で定期的にメンテナンスを行い、例えばエンジンが依存するデータベースから期限切れデータを消去します。デフォルトでは、処理エンジンには保守タスクを実行する2つのエージェントが含まれています。

!注カスタムエージェントを作成する必要は稀です。むしろ、デフォルトのTaskAgentで実行されるカスタムプロセッシングワーカーを作成する可能性が高いです。

RecurringAgentを継承するエージェントを作成する

以下のサンプルエージェントは、偽のストレージプロバイダー内のデータをクリーンアップするメソッドを呼び出します。ストレージプロバイダーはICustomProviderインターフェースで表現されます。エージェントはRecurringAgentを継承し、これは規則的かつ設定可能な間隔で実行されることを意味します。

エージェントクラスを作成する

エージェントクラスを作成するには:

  • クラスを作成し、以下のサンプルエージェントをコピーします。

!注サンプルICustomProviderとCustomProviderクラスは利便性のため同じファイルに含まれています。

using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Sitecore.Framework.Conditions; using Sitecore.Processing.Engine.Abstractions; using Sitecore.Processing.Engine.Agents;

namespace Sitecore.Documentation.Examples { ///

/// Provides basic agent functionality and services. /// public class SampleCleanupAgent : RecurringAgent { private readonly ICustomProvider _customProvider;

///

/// /// /// /// /// protected SampleCleanupAgent(ILogger logger, IConfiguration options, ICustomProvider customProvider) : base(options, logger) { Condition.Requires(customProvider, nameof(customProvider)).IsNotNull();

_customProvider = customProvider; }

///

/// /// /// /// protected override async Task RecurringExecuteAsync(CancellationToken token) { // Checks if cancellation has been requested in case task is long-running // It is your responsibility to check the status of the cancellation token while (!token.IsCancellationRequested) { await _customProvider.CleanData().ConfigureAwait(false); } } }

///

/// /// public interface ICustomProvider { /// /// /// /// Task GetData(); /// /// /// /// Task CleanData(); }

///

/// /// public class CustomProvider : ICustomProvider { /// /// /// /// public async Task CleanData() { // Clean up data in custom data provider await Task.Delay(1).ConfigureAwait(false); }

///

/// /// /// public async Task GetData() { // Get data from custom data provider await Task.Delay(1).ConfigureAwait(false); } } }

設定中のレジスタエージェントとサービス

  1. scという名前のファイルを作成します。Processing.Engine.CustomAgents.xml \\App_Data\\Config\\Globalに。
  2. レジスタは SampleCleanupAgent と ICustomProvider を示します。この例では、単一のエージェントを登録するためのシンプルな設定を用いています。
Sitecore.Documentation.Examples.CustomProvider, Sitecore.Documentation.Examples Sitecore.Documentation.Examples.ICustomProvider, Sitecore.Documentation.Examples Transient Sitecore.Documentation.Examples.SampleCleanupAgent, Sitecore.Documentation.Examples Sitecore.Processing.Engine.Abstractions.IAgent, Sitecore.Processing.Engine.Abstractions Transient 0.\`00:00\`:14.000

あるいは、エージェントがスケールする必要がある場合は、ParallelAgentsConfigurationを使って登録してください:

Sitecore.Documentation.Examples.CustomProvider, Sitecore.Documentation.Examples Sitecore.Documentation.Examples.ICustomProvider, Sitecore.Documentation.Examples Transient Sitecore.Processing.Engine.Agents.ParallelAgentsConfiguration, Sitecore.Processing.Engine Sitecore.XConnect.DependencyInjection.Abstractions.IXConnectServicesConfiguration, Sitecore.XConnect.DependencyInjection Transient 0 0.75 Sitecore.Documentation.Examples.SampleCleanupAgent, Sitecore.Documentation.Examples Sitecore.Processing.Engine.Abstractions.IAgent, Sitecore.Processing.Engine.Abstractions Transient 0.\`00:00\`:14.000

BaseAgentを継承するエージェントを作成します

以下のサンプルエージェントは起動時にログにメッセージを書き込み、1ミリ秒待ちます。エージェントは継承RecurringAgentせず、定期的に実行されません。

!重要このエージェントはエンジン起動時に一度だけ実行されます。しかし、エージェントは特定のイベントが発生するまでスリープし、その後そのイベントが再び起こるまでスリープすることがあります。エージェントは技術的には「再発」しますが、定期的なスケジュールされた間隔ではありません。

エージェントクラスを作成する

エージェントクラスを作成するには:

  • クラスを作成し、以下のサンプルエージェントをコピーします。

    using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Sitecore.Processing.Engine.Abstractions; using Sitecore.Processing.Engine.Agents;

    namespace Sitecore.Documentation.Examples { ///

    /// Provides basic agent functionality and services. /// public class SampleLogAgent : BaseAgent { /// /// /// /// /// protected SampleLogAgent(ILogger logger, IConfiguration options) : base(logger, options) { }

    ///

    /// /// /// /// public override async Task ExecuteAsync(CancellationToken token) { // Write a custom log message // No cancellation token check in this example as task is unlikely to be long-running base.Log.LogInformation("Your custom agent has started."); await Task.Delay(1).ConfigureAwait(false); } } }

設定中のレジスタエージェント

  1. scという名前のファイルを作成します。Processing.Engine.CustomAgents.xml \\App_Data\\Config\\Globalに。

  2. レジスタSampleCleanupAgent示す通り。この例では、単一エージェントを登録するためのシンプルな構成を用いています。

    Sitecore.Documentation.Examples.SampleLogAgent, Sitecore.Documentation.Examples Sitecore.Processing.Engine.Abstractions.IAgent, Sitecore.Processing.Engine.Abstractions Transient

タスクキャンセル

長期的なタスクにつながる可能性のあるエージェントを実装する場合は、token.IsCancellationRequestedExecuteAsync方法(BaseAgent相続エージェントの場合)またはRecurringExecuteAsyncメソッド(エージェントがRecurringAgentを継承する場合)でプロパティを確認するようにしてください。

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