イベント ソーシングの構成
この記事では、.NET Orleans のさまざまなイベント ソーシング構成オプションについて説明します。
プロジェクト参照を構成する
Grain Interfaces
前と同様、グレイン インターフェイスは実装に依存しないため、インターフェイスは Microsoft.Orleans.Core
パッケージのみに依存します。
グレインの実装
JournaledGrains は、Microsoft.Orleans.EventSourcing
パッケージで定義されている JournaledGrain<TGrainState,TEventBase> または JournaledGrain<TGrainState> から派生する必要があります。
ログ整合性プロバイダー
現在、3 つのログ整合性プロバイダー (状態ストレージ、ログ ストレージ、カスタム ストレージ用) が含まれています。 3 つすべてに Microsoft.Orleans.EventSourcing
パッケージも含まれています。 したがって、ジャーナル処理されたすべてのグレインには、既にそれらにアクセスできます。 これらのプロバイダーの動作とその違いについては、含まれるログ整合性プロバイダーに関する説明を参照してください。
クラスター構成
ログ整合性プロバイダーは、他の Orleans のプロバイダーと同様に構成します。 たとえば、3 つのプロバイダーをすべて含めるには (もちろん、3 つすべてが必要ない可能性があります)、これを構成ファイルの <Globals>
要素に追加します。
<LogConsistencyProviders>
<Provider Name="StateStorage"
Type="Orleans.EventSourcing.StateStorage.LogConsistencyProvider" />
<Provider Name="LogStorage"
Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider" />
<Provider Name="CustomStorage"
Type="Orleans.EventSourcing.CustomStorage.LogConsistencyProvider" />
</LogConsistencyProviders>
同じことをプログラムで実現できます。 2.0.0 安定版に移行すると、ClientConfiguration と ClusterConfiguration が存在しなくなります。 これは、ClientBuilder と SiloBuilder
に置き換えられています (クラスター ビルダーがないことに注意してください)。
builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")
グレイン クラスの属性
ジャーナル処理された各グレイン クラスには、ログ整合性プロバイダーを指定する LogConsistencyProviderAttribute が必要です。 一部のプロバイダーでは、たとえば次のように StorageProviderAttribute も必要です。
[StorageProvider(ProviderName = "OrleansLocalStorage")]
[LogConsistencyProvider(ProviderName = "LogStorage")]
public class EventSourcedBankAccountGrain :
JournaledGrain<BankAccountState>, IEventSourcedBankAccountGrain
{
//...
}
そのため、ここでは "LogStorage"
が EventSourcing イベントのメモリ ストレージ プロバイダーであるとき、グレイン状態の格納に、"OrleansLocalStorage"
を使用しています。
LogConsistencyProvider
属性
ログ整合性プロバイダーを指定するには、グレイン クラスに [LogConsistencyProvider(ProviderName=...)]
属性を追加し、たとえば次のように、クラスター構成で構成されているプロバイダーの名前を指定します。
[LogConsistencyProvider(ProviderName = "CustomStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain, ICustomStorage
{
// ...
}
StorageProvider
属性
一部のログ整合性プロバイダー (LogStorage
および StateStorage
を含む) は、ストレージとの通信に Standard StorageProvider を使用します。 このプロバイダーは、別の StorageProvider
の属性を使用して次のように指定します。
[LogConsistencyProvider(ProviderName = "LogStorage")]
[StorageProvider(ProviderName = "AzureBlobStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain
{
// ...
}
既定のプロバイダー
構成で既定値が指定されている場合は、LogConsistencyProvider
および StorageProvider
属性を省略することが可能です。 これは、それぞれのプロバイダーに Default
の特別な名前を使用して行います。 次に例を示します。
<LogConsistencyProviders>
<Provider Name="Default"
Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider"/>
</LogConsistencyProviders>
<StorageProviders>
<Provider Name="Default"
Type="Orleans.Storage.MemoryStorage" />
</StorageProviders>
.NET