---
title: "コマースエンジンの手下たち"
slug: "commerce-engine-minions"
abstract: ""
---
# コマースエンジンの手下たち

Sitecore XC Commerce Engineは、ミニオンを基本的な作業単位として活用し、プロセス内の特定のタスクを実行します。 [事前定義されたCommerce Engine](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/predefined-commerce-engine-minions.html "Predefined Commerce Engine minions")のミニオンは、以下の重要なプロセスを実行します:

-   商取引プロセス(例:注文や販売活動)
-   商業エンティティのインデックス化(例:注文、顧客、カタログアイテムのインデックス化)
-   管理操作(例えば*dev-ops* 操作)

ミニオンはリスト上で基本的な行動を行います。ミニオンが行う一般的なタスクには以下のようなものがあります。

-   一つまたは複数のリストを見る
-   リストへのアイテム追加
-   リストからアイテムを削除する方法
-   リストからリストへのアイテム移動

ミニオンは単一のタスクを実行して停止することができます。あるいは、スケジューラによってリストを反復し、パイプラインを呼び出してそのリストのビジネス機能(例えば注文処理ミニオンなど)を実行するためにトリガーされるミニオンもあります。

## ミニオン政策

ミニオンポリシーはPlugin.Minion.PolicySet-1.0.0.jsonファイル、または環境特有の[Commerce Engineポリシー](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/commerce-engine-policies.html "Commerce Engine policies")を含む.jsonファイルで定義されます。他の構成と同様に、ミニオンポリシー設定は[ブートストラップ](https://doc.sitecore.com/xp/ja/developers/101/sitecore-experience-commerce/bootstrap-the-commerce-engine.html "Bootstrap the Commerce Engine")プロセス中にCommerce Engineに登録されます。

MinionPolicyにはミニオンが処理するエンティティタイプを指定するEntitiesパラメータが含まれています。

ミニオンが実行する前に、他の実行中のミニオンが同じエンティティタイプを処理するように設定されているかを確認します。もし別のミニオンが同じエンティティタイプを処理している場合、ミニオンは最初のミニオンの実行が終わるまで自分のプロセスを開始しません。これにより、2つのミニオンが同じエンティティを同時に更新しようとした際に発生する並行エラーを防ぎます。

例えば、FullIndexMinionを実行する前に、DeleteIndexDocumentsMinionとIncrementalIndexMinion (どちらも同じエンティティタイプで動作します)が同時に動作していないかをチェックし、インデックス内のデータ破損を防ぎます。

以下はインデックスミニオンポリシーの例を示しています:

{
 "$type": "Sitecore.Commerce.Core.MinionPolicy, Sitecore.Commerce.Core",
 "WakeupInterval": "\`00:05\`:00",
 "ListsToWatch": 
 "CatalogItemsIndex"
 ,
 "FullyQualifiedName": "Sitecore.Commerce.Plugin.Search.IncrementalIndexMinion, Sitecore.Commerce.Plugin.Search",
 "ItemsPerBatch": 1000,
 "SleepBetweenBatches": 500,
 "Entities": {
 "$type": "System.Collections.Generic.List\`1System.String, mscorlib, mscorlib",
 "$values": 
 "Sitecore.Commerce.Plugin.Catalog.Catalogs, Sitecore.Commerce.Plugin.Catalog",
 "Sitecore.Commerce.Plugin.Catalog.Category, Sitecore.Commerce.Plugin.Catalog",
 "Sitecore.Commerce.Plugin.Catalog.SellableItem, Sitecore.Commerce.Plugin.Catalog"
 
 }
 },

Entitiesプロパティは任意です。Entitiesプロパティが空のままの場合、ミニオンは同じタイプのミニオンを別のものにチェックするだけで実行します。

例えば、以下のミニオンポリシー設定では、PurgeCartsMinionはすでにそのPurgeCartsMinionのインスタンスが他に実行されていない場合にのみ実行されます。

{
 "$type": "Sitecore.Commerce.Core.MinionPolicy, Sitecore.Commerce.Core",
 "WakeupInterval": "\`24:00\`:00",
 "ListsToWatch":
 "Carts"
 ,
 "FullyQualifiedName": "Sitecore.Commerce.Plugin.Carts.PurgeCartsMinion, Sitecore.Commerce.Plugin.Carts",
 "ItemsPerBatch": 1000,
 "SleepBetweenBatches": 500
 },

以下の表はミニオン構成の性質を示しています:

財産

概要

type

ミニオンの元となるクラスタイプを宣言します。

WakeupInterval

ミニオンが走る間隔を設定します。

ListsToWatch

ミニオンが監視しているリストの名前を指定します。ミニオンは、 "promotions" や "promotionsBooks"のような類似型のエンティティに対して複数のリストを監視できます。  
  
\> \[!注\]  
\> 複数のリストを監視する際、ミニオンは最初のリストからデータを読み取り、次に2つ目のリストを読み、というように繰り返します。  
\> このプロパティはリリース9.3 Sitecore XC導入され、廃止された ListToWatch プロパティを置き換えます。  
  
この物件は必須です。

FullyQualifiedName

ミニオンクラスの完全な限定名を指定します。

ItemsPerBatch

バッチで文書をインデックスするためにミニオンが処理する文書の数を指定します。

SleepBetweenBatches

各文書バッチ間の待ち時間を示します。

Entities

ミニオンが処理するエンティティの種類を指定します。

## スケーリング・ミニオン

コマースエンジンは *ボスミニオン*を利用しており、これは親ミニオンとして子供ミニ *オンに仕事* を委託します。各子供ミニオンは自分が行動するリストを定義します。これにより、複数のミニオンが1つのリストを読み合うことなくスケールを拡張できます。

保留中の命令プロセスは、スケール可能なボスミニオン実装の良い例を提供します。 PendingOrdersMinionBossは、PendingOrdersリストを監視するように設定された親ミニオンとして定義されます。ボスミニオンの主な役割は、保留中の命令を*子*ミニオンに分配し、処理させることです。 PendingOrdersMinionBossには2つの*子* ミニオンが定義されています。各子は自分の保留中の命令リスト(それぞれPendingOrder.1とPendingOrder.2)を独立して処理します。

以下は、2つの子ミニオン定義を含む親ボスミニオンを示すスケーリングミニオン構成の例です。

{
 "$type": "Sitecore.Commerce.Core.MinionBossPolicy, Sitecore.Commerce.Core",
 "Children": {
 "$type": "System.Collections.Generic.List\`1Sitecore.Commerce.Core.MinionPolicy, Sitecore.Commerce.Core, mscorlib",
 "$values": 
 {
 "$type": "Sitecore.Commerce.Core.MinionPolicy, Sitecore.Commerce.Core",
 "WakeupInterval": "\`00:05\`:00",
 "ListsToWatch": 
 "PendingOrders.1"
 
 "FullyQualifiedName": "Sitecore.Commerce.Plugin.Orders.PendingOrdersMinion, Sitecore.Commerce.Plugin.Orders",
 "ItemsPerBatch": 10,
 "SleepBetweenBatches": 500
 },
 {
 "$type": "Sitecore.Commerce.Core.MinionPolicy, Sitecore.Commerce.Core",
 "WakeupInterval": "\`00:05\`:00",
 "ListsToWatch": 
 "PendingOrders.2"
 
 "FullyQualifiedName": "Sitecore.Commerce.Plugin.Orders.PendingOrdersMinion, Sitecore.Commerce.Plugin.Orders",
 "ItemsPerBatch": 10,
 "SleepBetweenBatches": 500
 }
 
 },
 "WakeupInterval": "\`00:05\`:00",
 "ListsToWatch": 
 "PendingOrders"
 ,
 "FullyQualifiedName": "Sitecore.Commerce.Plugin.Orders.PendingOrdersMinionBoss, Sitecore.Commerce.Plugin.Orders",
 "ItemsPerBatch": 10,
 "SleepBetweenBatches": 500
 }
 
},