在本文中,你将了解 .NET Orleans的各种事件溯源配置选项。
配置项目引用
晶粒界面
与以前一样,接口只依赖于 Microsoft.Orleans.Core
包,因为粒度接口独立于实现。
粒度实现
有日志记录的粒度需要派生自JournaledGrain<TGrainState,TEventBase>或JournaledGrain<TGrainState>,这些是在Microsoft.Orleans.EventSourcing
包中定义的。
日志一致性提供商
我们目前包括三个日志一致性提供程序(用于状态存储、日志存储和自定义存储)。 这三项也包含在Microsoft.Orleans.EventSourcing
包中。 因此,所有记录过的谷物已能访问它们。 有关这些提供程序执行的操作及它们的差异的描述,请参阅 包含的日志一致性提供程序。
群集配置
像配置其他Orleans 提供者一样配置日志一致性提供者。 例如,若要包含所有三个提供程序(尽管可能不需要这三个提供程序),请将它添加到 <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>
可以通过编程方式实现相同的目标。 从 Orleans 2.0.0 稳定开始, ClientConfiguration
ClusterConfiguration
不再存在。 它们已被替换( ClientBuilderSiloBuilder
请注意没有群集生成器)。
builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")
谷物类别属性
每个日志粒度类必须有一个 LogConsistencyProviderAttribute 指定日志一致性提供程序。 某些服务提供商还需要一个 StorageProviderAttribute,例如:
[StorageProvider(ProviderName = "OrleansLocalStorage")]
[LogConsistencyProvider(ProviderName = "LogStorage")]
public class EventSourcedBankAccountGrain :
JournaledGrain<BankAccountState>, IEventSourcedBankAccountGrain
{
//...
}
因此, "OrleansLocalStorage"
此处用于存储粒度状态,而 "LogStorage"
内存中存储提供程序用于 EventSourcing 事件。
LogConsistencyProvider
属性
若要指定日志一致性提供程序,请将属性 [LogConsistencyProvider(ProviderName=...)]
添加到粒度类,并提供在群集配置中配置的提供程序的名称,例如:
[LogConsistencyProvider(ProviderName = "CustomStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain, ICustomStorage
{
// ...
}
StorageProvider
属性
某些日志一致性提供程序(包括 LogStorage
和 StateStorage
)使用标准 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>